"Permission denied"尝试在我自己的活动中处理来自浏览器的"Share Image"意图时



我正在尝试编写一个简单的活动,它执行以下操作:用户按住在Android浏览器中查看的图像,然后按下"共享图像"并选择我的活动来处理它。我希望能够从我的活动中打开图像文件。

文件路径最终为:/data/data/com.android.browser/app_sharedmamage/SOME_file_NAME.jpg并且在路径上调用"File()"会导致权限错误:java.io.FileNotFoundException:/data/data/com.android.browser/app_sharedmamage/SOME_FILE_NAME.jpg(权限被拒绝")

如何打开此图像文件?我需要在舱单上写一些许可吗?

这是相关代码:

        if (Intent.ACTION_SEND.equals(intent.getAction())) {
            if (extras.containsKey(Intent.EXTRA_STREAM)) {
                Uri uri = (Uri) extras.getParcelable(Intent.EXTRA_STREAM);
                String scheme = uri.getScheme();
                if (scheme.equals("content")) {
                    String mimeType = intent.getType();
                    ContentResolver contentResolver = getContentResolver();
                    Cursor cursor = contentResolver.query(uri, null, null,
                            null, null);
                    cursor.moveToFirst();
                    String filePath = cursor.getString(cursor
                            .getColumnIndexOrThrow(Images.Media.DATA));
                    ...
                    ...
                    new FileBody(new File(filePath)) 
                    ...

AFAIK除非您的手机是root用户,否则您将无法访问任何其他应用程序的私人文件。所以我认为你无法打开图像。

我可以在HTC Desire上显示(我想这就是你打开的意思)浏览器中的图像,但它没有根。

我和您一样使用Intent中的附加URI。然后我得到一个InputStream并从中创建一个Drawable,它可以显示在ImageView中。

我得到的URI是:

content://htcbrowser/share_image/data/data/com.android.browser/app_sharedimage/logo3w.png?image/png

if (intent.getType() != null && intent.getType().indexOf("image/") != -1) {
        Bundle extras = intent.getExtras();
         if (extras.containsKey(Intent.EXTRA_STREAM)) {
            Uri uri = (Uri) extras.getParcelable(Intent.EXTRA_STREAM);
            ImageView iv = (ImageView) findViewById(R.id.imageView1);
            try {
                InputStream is = getContentResolver().openInputStream(uri);
                Drawable myDrawable = Drawable.createFromStream(is, "srcName");
                iv.setImageDrawable(myDrawable);
            } catch (FileNotFoundException e) {
                e.printStackTrace();
            }
        }
    }

最新更新