Android 如何正确地将本地文件中的Uri放入意图
我希望将本地图像文件(位于res/drawable)转换为Uri,以便将其放入启动活动的意图中 这是我到目前为止得到的:Android 如何正确地将本地文件中的Uri放入意图,android,android-intent,uri,drawable,Android,Android Intent,Uri,Drawable,我希望将本地图像文件(位于res/drawable)转换为Uri,以便将其放入启动活动的意图中 这是我到目前为止得到的: Intent sendIntent = new Intent(); sendIntent.setAction(Intent.ACTION_SEND); sendIntent.setType("image/*"); Uri uri = Uri.fromFile(new File("/res/drawable/photo.jpg"));
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");
但是他们都为我返回了相同的错误
为什么无法识别我的图像?您应该为应用程序创建ContentProvider,这样可以共享资源 试试这个lib,它的效果很棒。
您应该为应用程序创建ContentProvider,这将允许您共享资源 试试这个lib,它的效果很棒。 我希望将本地图像文件(位于res/drawable)转换为Uri,以便将其放入启动活动的意图中 资源是开发人员计算机上的文件。它们不是设备上的文件 这就是我现在所得到的 这是行不通的,因为在文件系统根目录下没有带
/res
目录的Android设备,而且您的可绘制资源也不会在那里
为什么我的形象不被认可
您的第三个(android.resource
scheme)是最接近的。去掉.jpg
扩展名
然而,许多第三方应用程序不会承认这一方案。而且,如果您正在执行用于处理此请求的活动,我不知道您为什么要使用ACTION\u SEND
。如果您的目标是仅在自己的应用程序中工作,请跳过Uri
,将可绘制资源ID(R.drawable.photo
)打包为int
额外,并让您的其他活动更自然地使用该资源ID(例如ImageView
上的setImageResource()
)
我希望将本地图像文件(位于res/drawable)转换为Uri,以便将其放入启动活动的意图中
资源是开发人员计算机上的文件。它们不是设备上的文件
这就是我现在所得到的
这是行不通的,因为在文件系统根目录下没有带/res
目录的Android设备,而且您的可绘制资源也不会在那里
为什么我的形象不被认可
您的第三个(android.resource
scheme)是最接近的。去掉.jpg
扩展名
然而,许多第三方应用程序不会承认这一方案。而且,如果您正在执行用于处理此请求的活动,我不知道您为什么要使用
ACTION\u SEND
。如果您的目标是仅在自己的应用程序中工作,请跳过Uri
,将可绘制资源ID(R.drawable.photo
)打包为int
额外,并让您的其他活动更自然地使用该资源ID(例如ImageView
上的setImageResource()
).也许你可以试试这里的东西检查这个答案:也许你可以试试这里的东西检查这个答案:谢谢你的提示。我去掉了扩展名.jpg,它找到了我的图像!我实施了处理它的活动,只是为了实践我现在正在学习的概念。不管怎样,这真的很有帮助。谢谢你的提示。我去掉了扩展名.jpg,它找到了我的图像!我实施了处理它的活动,只是为了实践我现在正在学习的概念。不管怎样,这真的很有帮助。