我正在尝试编写一个简单的活动,它执行以下操作:用户按住在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();
}
}
}