Ich versuche, Bilder mit meiner App zu akzeptieren, um sie an einen Server zu senden. Das Einrichten des Intent-Filters war einfach und das funktioniert wie ein Zauber. Die Sache, die ich nicht herausfinden kann, ist die Art, wie ich den Dateipfad von der uri in der Absicht abrufen muss.Absicht empfangen von Aktion senden generiert SecurityException auf URI
Ich empfange Absichten auf meine Tätigkeit mit diesem Filter
<intent-filter>
<action android:name="android.intent.action.SEND" />
<action android:name="android.intent.action.SEND_MULTIPLE" />
<category android:name="android.intent.category.DEFAULT" />
<data android:mimeType="image/jpeg" />
<data android:mimeType="image/png" />
<data android:mimeType="image/gif" />
</intent-filter>
Durch den Versuch, die uri bekommen Sie den Dateipfad ich diesen Fehler zu verarbeiten durch den Aufruf takePersistableUriPermission (uri, modeFlags):
java.lang.SecurityException: No persistable permission grants found for UID 10098 and Uri 0 @ content://media/external/images/media/124
Die Logik, die ich verwende, funktioniert, um Bilder mit einer Absicht von innerhalb meiner App anzufordern, aber das Empfangen einer Absicht von außerhalb der App erzeugt den Fehler.
für Kitkat und oben:
final int flags = data.getFlags() & (Intent.FLAG_GRANT_READ_URI_PERMISSION | Intent.FLAG_GRANT_WRITE_URI_PERMISSION);
final String[] imageColumns = {MediaStore.Images.Media.DATA};
getActivity().getContentResolver().takePersistableUriPermission(uri, flags);
String id = uri.getLastPathSegment().split(":")[1];
Cursor imageCursor = context.managedQuery(getStorageUri(), imageColumns, MediaStore.Images.Media._ID + "=" + id, null, null);
Erhalten Sie diesen Fehler in Android 6.0 und höher? –
, weil Sie android: exported = "false" gesetzt haben, was bedeutet, dass andere Prozesse nicht auf diese Aktivität zugreifen können. So stellen Sie es auf wahr und tun das gleiche wird es nicht crashen –
@SanjayKakadiya keine kitkat und oben, nur getestet, um sicher zu sein. – SjoerdvGestel