我想将我的本地图像文件(位于res / drawable)转换为Uri,因此我可以将其放入Intent中以启动Activity。
这是我到目前为止所得到的:
Intent sendIntent = new Intent();
sendIntent.setAction(Intent.ACTION_SEND);
sendIntent.setType("image/*");
Uri uri = Uri.fromFile(new File("/res/drawable/photo.jpg"));
sendIntent.putExtra(Intent.EXTRA_STREAM, uri);
startActivity(Intent.createChooser(sendIntent, getResources().getText(R.string.share)));
然后,接收此意图的活动会在ImageView中显示图像。像这样:
Uri imageUri = (Uri) getIntent().getParcelableExtra(Intent.EXTRA_STREAM);
Bitmap bitmap = MediaStore.Images.Media.getBitmap(this.getContentResolver(), imageUri);
ImageView myImage = (ImageView) findViewById(R.id.imageView_receive);
myImage.setImageBitmap(bitmap);
但不是显示图像,而是抛出 java.io.FileNotFoundException
java.io.FileNotFoundException: No resource found for: android.resource://com.my.package/drawable/photo.jpg
我搜索并尝试了其他方法来通过我的文件获取Uri:
Uri uri = Uri.parse("file:///res/drawable/photo.jpg");
Uri uri = Uri.parse("android.resource://com.my.package/drawable/photo.jpg");
但他们都为我回复了同样的错误。
为什么我的图像无法识别?
答案 0 :(得分:1)
您应该为您的应用程序创建ContentProvider,这样您就可以共享资源。
试试这个lib,它很棒。 https://github.com/commonsguy/cwac-provider
答案 1 :(得分:1)
我想将我的本地图像文件(位于res / drawable)转换为Uri,因此我可以将其放入Intent中以启动Activity。
资源是开发人员计算机上的文件。它们不是设备上的文件。
这是我到现在为止所得到的
那是行不通的,因为AFAIK的文件系统根目录中没有/res
目录的Android设备,而且你的可绘制资源也不会存在。
为什么我的图像无法识别?
您的第三个(android.resource
计划)是最接近的。摆脱.jpg
扩展名。
但是,许多第三方应用程序无法识别该方案。而且,如果您要实现处理此请求的活动,我不知道您使用ACTION_SEND
的原因。如果您的目标是仅在您自己的应用中工作,请跳过Uri
,将可绘制资源ID(R.drawable.photo
)打包为int
个额外内容,并让您的其他活动使用该资源ID更自然地(例如,setImageResource()
上的ImageView
。