相关疑难解决方法(0)

java.lang.SecurityException:权限拒绝:打开提供者com.google.android.apps.photos.content.GooglePhotosImageProvider

突然间,我开始从运行android 4.3及更高版本的设备获得以下异常

java.lang.SecurityException: Permission Denial: opening provider com.google.android.apps.photos.content.GooglePhotosImageProvider from ProcessRecord{454ca9d0 5914:com.propertymanager/u0a10231} (pid=5914, uid=10231) requires com.google.android.apps.photos.permission.GOOGLE_PHOTOS or com.google.android.apps.photos.permission.GOOGLE_PHOTOS
        at android.os.Parcel.readException(Parcel.java:1431)
        at android.os.Parcel.readException(Parcel.java:1385)
        at android.app.ActivityManagerProxy.getContentProvider(ActivityManagerNative.java:2896)
        at android.app.ActivityThread.acquireProvider(ActivityThread.java:4755)
        at android.app.ContextImpl$ApplicationContentResolver.acquireUnstableProvider(ContextImpl.java:2480)
        at android.content.ContentResolver.acquireUnstableProvider(ContentResolver.java:1152)
        at android.content.ContentResolver.openTypedAssetFileDescriptor(ContentResolver.java:759)
        at android.content.ContentResolver.openAssetFileDescriptor(ContentResolver.java:665)
        at android.content.ContentResolver.openInputStream(ContentResolver.java:500)
        at com.myapp.xxxx.determineCorrectScale(SourceFile:148)
Run Code Online (Sandbox Code Playgroud)

我导致它的代码是

    public static int determineCorrectScale(Context con, Uri imagUri) {
        int scale = 1;
        InputStream imageStream = null;

                imageStream = con.getContentResolver().openInputStream(imagUri);
.
.
.
    }
Run Code Online (Sandbox Code Playgroud)

任何帮助?

编辑:这是我让用户在调用上述方法之前选择图片的方式

Intent choosePictureIntent = new Intent(Intent.ACTION_PICK, Images.Media.INTERNAL_CONTENT_URI);
tartActivityForResult(choosePictureIntent, REQUEST_CHOOSE_IMAGE);
Run Code Online (Sandbox Code Playgroud)

这是OnActivityResult:

protected void onActivityResult(int requestCode, int resultCode, Intent intent) …
Run Code Online (Sandbox Code Playgroud)

android

17
推荐指数
2
解决办法
2万
查看次数

java.lang.SecurityException:权限拒绝:打开提供程序

我使用以下命令启动图像选择器意图:

final Intent pickIntent = new Intent(Intent.ACTION_PICK, MediaStore.Images.Media.EXTERNAL_CONTENT_URI);
pickIntent.putExtra(Intent.EXTRA_ALLOW_MULTIPLE, true);
startActivityForResult(intent, PICK_IMAGE);
Run Code Online (Sandbox Code Playgroud)

然后onActivityResult()我得到所有选择的图像的uris,并启动在后台运行的Jobs并上传这些图像(https://github.com/yigit/android-priority-jobqueue)。但是,如果我按后退按钮并退出活动,那么任何未启动的作业都无法在运行时访问选择的图像并引发异常:

java.lang.SecurityException:权限拒绝:未从uid 10123导出的ProcessRecord {...}(pid = 2407,uid = 10117)打开提供程序com.google.android.apps.photos.contentprovider.MediaContentProvider

发生这种情况的原因是,一旦活动完成,权限就会被撤销。根据文档https://developer.android.com/guide/topics/providers/content-provider-basics.html

这些是对特定内容URI的权限,该权限将持续到接收它们的活动完成为止。

我的问题是,是否有解决方法?喜欢在应用程序级别获得许可?

有哪些替代方案可以解决此问题?一种快速的解决方案似乎是复制所有拾取的图像,然后上传它们,但这似乎是不得已的方法。

android permission-denied android-contentprovider android-permissions

5
推荐指数
1
解决办法
1万
查看次数

从另一个应用程序(WhatsApp)获取路径

我没有从我从 WhatsApp 收到的 uri 的图像或视频中获取路径。

Uri 是这样的:content://com.whatsapp.provider.media/item/16695

来自图库、下载和其他的媒体都很好。

有谁知道怎么获取路径?这是我正在使用的代码:

public String getMediaPath(Context context, Uri uri) {

    if (DEBUG)
        Log.d(TAG + " File -",
                "Authority: " + uri.getAuthority() +
                        ", Fragment: " + uri.getFragment() +
                        ", Port: " + uri.getPort() +
                        ", Query: " + uri.getQuery() +
                        ", Scheme: " + uri.getScheme() +
                        ", Host: " + uri.getHost() +
                        ", Segments: " + uri.getPathSegments().toString()
        );

    // DocumentProvider
    if (DocumentsContract.isDocumentUri(context, uri)) {
        // ExternalStorageProvider
        if (isExternalStorageDocument(uri)) {
            final String docId = DocumentsContract.getDocumentId(uri); …
Run Code Online (Sandbox Code Playgroud)

android uri path whatsapp

5
推荐指数
1
解决办法
29万
查看次数