接收器应用程序 - 处理意图过滤器 URI 的权限
Receiver app - handle permission for intent filter URI
我对 Android 的整个 Fileprovider 感到很困惑。我整天都在看视频和看其他帖子......我希望有人能尽快帮助我。
我有一个应用程序可以处理 images/PDF 等...并将它们上传到服务器。为此,我在我的条目 activity 上实施了一个意图过滤器。
<intent-filter>
<action android:name="android.intent.action.SEND_MULTIPLE" />
<category android:name="android.intent.category.DEFAULT" />
<data android:mimeType="image/*" />
</intent-filter>
那个 activity 得到了意图,但是将它的数据发送给另一个 activity。
(intent.getParcelableArrayListExtra<Parcelable>(Intent.EXTRA_STREAM) as? ArrayList<Uri>)?.let {
activity.startActivity(MainActivity.newInstance(activity, it))
}
和
public static Intent newInstance(@NonNull Context context, @NonNull ArrayList<Uri> images) {
Intent intent = new Intent(context, MainActivity.class);
intent.putParcelableArrayListExtra(INTENT_EXTRA_IMAGES, images);
intent.setFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION|Intent.FLAG_GRANT_WRITE_URI_PERMISSION);
return intent;
}
activity 尝试使用 contentresolver
读取 Uri
val openInputStream = context.contentResolver?.openInputStream(originalFileUri)
但是这样做会崩溃 - 有时...
如果我从相册应用中分享照片,一切正常。如果我从下载文件夹中分享照片,我会得到
java.lang.SecurityException: Permission Denial: opening provider com.android.providers.downloads.DownloadStorageProvider from ProcessRecord{40bd561 8082:APPNAME/u0a749} (pid=8082, uid=10749) requires that you obtain access using ACTION_OPEN_DOCUMENT or related APIs
如果我将照片从 whatsapp 分享到我的应用程序,我会得到
java.lang.SecurityException: Permission Denial: opening provider com.whatsapp.contentprovider.MediaProvider from ProcessRecord{a684e0e 6544:APPNAME/u0a749} (pid=6544, uid=10749) that is not exported from UID 10140
我不知道为什么这是...
That activity gets the intent, but sends its data to another activity.
这不太理想。
但是,如果您必须这样做,请将 FLAG_GRANT_READ_URI_PERMISSION
(如果需要,FLAG_GRANT_WRITE_URI_PERMISSION
)添加到用于启动 MainActivity
的 Intent
。否则,MainActivity
may not have permission to work with the content.
我对 Android 的整个 Fileprovider 感到很困惑。我整天都在看视频和看其他帖子......我希望有人能尽快帮助我。
我有一个应用程序可以处理 images/PDF 等...并将它们上传到服务器。为此,我在我的条目 activity 上实施了一个意图过滤器。
<intent-filter>
<action android:name="android.intent.action.SEND_MULTIPLE" />
<category android:name="android.intent.category.DEFAULT" />
<data android:mimeType="image/*" />
</intent-filter>
那个 activity 得到了意图,但是将它的数据发送给另一个 activity。
(intent.getParcelableArrayListExtra<Parcelable>(Intent.EXTRA_STREAM) as? ArrayList<Uri>)?.let {
activity.startActivity(MainActivity.newInstance(activity, it))
}
和
public static Intent newInstance(@NonNull Context context, @NonNull ArrayList<Uri> images) {
Intent intent = new Intent(context, MainActivity.class);
intent.putParcelableArrayListExtra(INTENT_EXTRA_IMAGES, images);
intent.setFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION|Intent.FLAG_GRANT_WRITE_URI_PERMISSION);
return intent;
}
activity 尝试使用 contentresolver
读取 Urival openInputStream = context.contentResolver?.openInputStream(originalFileUri)
但是这样做会崩溃 - 有时...
如果我从相册应用中分享照片,一切正常。如果我从下载文件夹中分享照片,我会得到
java.lang.SecurityException: Permission Denial: opening provider com.android.providers.downloads.DownloadStorageProvider from ProcessRecord{40bd561 8082:APPNAME/u0a749} (pid=8082, uid=10749) requires that you obtain access using ACTION_OPEN_DOCUMENT or related APIs
如果我将照片从 whatsapp 分享到我的应用程序,我会得到
java.lang.SecurityException: Permission Denial: opening provider com.whatsapp.contentprovider.MediaProvider from ProcessRecord{a684e0e 6544:APPNAME/u0a749} (pid=6544, uid=10749) that is not exported from UID 10140
我不知道为什么这是...
That activity gets the intent, but sends its data to another activity.
这不太理想。
但是,如果您必须这样做,请将 FLAG_GRANT_READ_URI_PERMISSION
(如果需要,FLAG_GRANT_WRITE_URI_PERMISSION
)添加到用于启动 MainActivity
的 Intent
。否则,MainActivity
may not have permission to work with the content.