L
LittleExpert
Neues Mitglied
- 0
Hallo,
ich stelle in meiner App Logdateien per Contentprovider zur Verfügung.
Diese werden per ACTION_SEND_MULTIPLE intent versendet.
Auf einigen Geräten (ich vermute mit älteren Android Versionen) funktioniert das.
Dort kann ich dann aus der Liste der Apps die den ACTION_SEND_MULTIPLE intent unterstützen z.B. eine Emailapp auswählen und diese hat die Dateien im Anhang.
Auf anderen Geräten (ich vermute mit neueren Android Versionen) erhalte ich eine java.lang.SecurityException (Provider ... does not allow granting of Uri permissions).
Das hinzufügen der Codezeile emailIntent.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION); um temporären Zugriff zu gewähren ändert nichts.
Wenn ich in mein Manifest für den Provider den Eintrag android:grantUriPermissions="true" (diesen Eintrag gab es bisher nicht) hinzufüge funktioniert es wieder.
Was bedeutet dieser Eintrag für meine App bezüglich Sichertheit etc.?
Was bedeutet der folgende Auszug aus der Doku?
"If you enable this feature, either by setting this attribute to "true" or by defining <grant-uri-permission> subelements, you must call Context.revokeUriPermission() when a covered URI is deleted from the provider."
Bisher rufe ich Context.revokeUriPermission() nicht auf.
Viele Grüße,
LittleExpert
ich stelle in meiner App Logdateien per Contentprovider zur Verfügung.
Diese werden per ACTION_SEND_MULTIPLE intent versendet.
Code:
public static void sendLogfiles(Activity activity) {
try {
File[] logFiles = Logging.getAllLogfiles();
if ( ( logFiles != null ) && ( logFiles.length > 0 ) ) {
final Intent emailIntent = new Intent(android.content.Intent.ACTION_SEND_MULTIPLE);
ArrayList<Uri> uris = new ArrayList<Uri>();
emailIntent.setType("text/plain");
emailIntent.putExtra(android.content.Intent.EXTRA_SUBJECT, "Android Logfiles");
String osVersion = android.os.Build.VERSION.SDK_INT + ", " + android.os.Build.VERSION.RELEASE;
String versionName = activity.getPackageManager().getPackageInfo( activity.getPackageName(), 0 ).versionName;
String body = String.format("Android Logfiles\r\nModel: %s\r\nManufacturer: %s\r\nAndroid OS: %s\r\nApp version: %s",
android.os.Build.MODEL, android.os.Build.MANUFACTURER, osVersion, versionName);
emailIntent.putExtra(android.content.Intent.EXTRA_TEXT, body);
for (File logFile : logFiles) {
uris.add(Uri.parse( "content://" + LogFileProvider.AUTHORITY + "/" + logFile.getName() ) );
}
emailIntent.putParcelableArrayListExtra(Intent.EXTRA_STREAM,uris);
activity.startActivity( Intent.createChooser(emailIntent, "Send log files to" ) );
}
} catch (Exception e) {
Log.error( "sendLogfiles failed, Exception:" + e.toString() );
}
}
Dort kann ich dann aus der Liste der Apps die den ACTION_SEND_MULTIPLE intent unterstützen z.B. eine Emailapp auswählen und diese hat die Dateien im Anhang.
Auf anderen Geräten (ich vermute mit neueren Android Versionen) erhalte ich eine java.lang.SecurityException (Provider ... does not allow granting of Uri permissions).
Das hinzufügen der Codezeile emailIntent.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION); um temporären Zugriff zu gewähren ändert nichts.
Wenn ich in mein Manifest für den Provider den Eintrag android:grantUriPermissions="true" (diesen Eintrag gab es bisher nicht) hinzufüge funktioniert es wieder.
Was bedeutet dieser Eintrag für meine App bezüglich Sichertheit etc.?
Was bedeutet der folgende Auszug aus der Doku?
"If you enable this feature, either by setting this attribute to "true" or by defining <grant-uri-permission> subelements, you must call Context.revokeUriPermission() when a covered URI is deleted from the provider."
Bisher rufe ich Context.revokeUriPermission() nicht auf.
Viele Grüße,
LittleExpert