我試圖接受圖像與我的應用程序發送到服務器。設置意圖過濾器非常簡單,它就像一個魅力。我似乎無法弄清楚的事情是我需要從意圖中的uri中檢索文件路徑的方式。從操作收到的意圖發送在URI上產生SecurityException
我收到我的活動意圖與此過濾器
<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>
通過嘗試處理URI通過調用takePersistableUriPermission(URI,modeFlags)來獲取文件路徑我得到這個錯誤:
java.lang.SecurityException: No persistable permission grants found for UID 10098 and Uri 0 @ content://media/external/images/media/124
我使用的邏輯適用於從我的應用程序中請求圖像,但從應用程序外部接收意圖會產生錯誤。
KitKat及以上:
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);
您是否在Android 6.0及以上版本發生了此錯誤? –
因爲你設置了android:exported =「false」,這意味着其他進程無法訪問這個Activity。所以你把它設置爲true,並做同樣的事情,它不會崩潰 –
@SanjayKakadiya沒有kitkat和以上,只是測試確定。 – SjoerdvGestel