在 Android 的默认图库图像查看器中使用 URI 打开图像
我已经提取了图像 uri,现在我想使用 Android 的默认图像查看器打开图像。或者更好的是,用户可以选择使用什么程序来打开图像。如果您尝试打开文件,则会提供诸如文件资源管理器之类的功能。
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
我已经提取了图像 uri,现在我想使用 Android 的默认图像查看器打开图像。或者更好的是,用户可以选择使用什么程序来打开图像。如果您尝试打开文件,则会提供诸如文件资源管理器之类的功能。
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
接受
或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
发布评论
评论(14)
对这个问题的一个更清晰、更安全的答案(你真的不应该对字符串进行硬编码):
你所要做的就是将图像 id 附加到 EXTERNAL_CONTENT_URI。然后使用 View 操作和 Uri 启动 Intent。
图像 ID 来自查询内容解析器。
A much cleaner, safer answer to this problem (you really shouldn't hard code Strings):
All you have to do is append the image id to the end of the path for the EXTERNAL_CONTENT_URI. Then launch an Intent with the View action, and the Uri.
The image id comes from querying the content resolver.
以上所有答案均未打开图像。当我第二次尝试打开它时,显示的是图库而不是图像。
我从各种答案的混合中得到了解决方案..
这个只对我有用..
All the above answers not opening image.. when second time I try to open it show the gallery not image.
I got solution from mix of various SO answers..
This one only worked for me..
使用
Intent.ACTION_VIEW
显示文件的问题是,如果您传递解析路径的Uri
。并非在所有情况下都有效。要解决该问题,您需要使用:而不是:
Edit
这是我的完整代码:
Info
MediaFile
是我用于包装文件的域类来自对象中的数据库。MediaFile.getExtension()
返回一个String
,其中Mimetype
作为文件扩展名。示例:"image/png"
其他代码:显示任何文件(扩展名)所需的代码,
如果您需要更多代码,请告诉我。
The problem with showing a file using
Intent.ACTION_VIEW
, is that if you pass theUri
parsing the path. Doesn't work in all cases. To fix that problem, you need to use:Instead of:
Edit
Here is my complete code:
Info
MediaFile
is my domain class to wrap files from database in objects.MediaFile.getExtension()
returns aString
withMimetype
for the file extension. Example:"image/png"
Aditional code: needed for showing any file (extension)
Let me know if you need more code.
我用这个它对我有用
I use this it works for me
我使用文件提供程序的解决方案
My solution using File Provider
几乎没有机会使用照片或图库应用程序(可能存在),但您可以尝试内容查看器。
请在此处查看类似问题的另一个答案
Almost NO chance to use photo or gallery application(might exist one), but you can try the content-viewer.
Please checkout another answer to similar question here
我的解决方案
My solution
uri 必须是内容 uri 而不是文件 uri,
您可以通过 FileProvider 获取 contentUri,因为
不要忘记在 Manifest 文件中添加提供程序。
The uri must be content uri not file uri,
You can get contentUri by FileProvider as
Don't forget adding provider in Manifest file.
接受的答案对我不起作用,
什么有效:
Accepted answer was not working for me,
What had worked:
如果您的应用程序面向 Android N (7.0) 及更高版本,则不应使用上面的答案(“Uri.fromFile”方法),因为它不适合您。
相反,您应该使用 ContentProvider。
例如,如果您的图像文件位于外部文件夹中,您可以使用它(类似于我在此处< /strong>) :
manifest:
res/xml/provider_paths.xml :
如果您的图像位于应用程序的私有路径中,您应该创建自己的 ContentProvider,就像我创建的那样链接上的“OpenFileProvider”。
If your app targets Android N (7.0) and above, you should not use the answers above (of the "Uri.fromFile" method), because it won't work for you.
Instead, you should use a ContentProvider.
For example, if your image file is in external folder, you can use this (similar to the code I've made here) :
manifest:
res/xml/provider_paths.xml :
If your image is in the private path of the app, you should create your own ContentProvider, as I've created "OpenFileProvider" on the link.
问我自己,也回答我自己:
它还会询问使用什么程序来查看该文件。
Ask myself, answer myself also:
It will also ask what program to use to view the file.
尝试使用它:
Try use it:
基于 Vikas 答案,但略有修改: Uri 通过参数接收:
Based on Vikas answer but with a slight modification: The Uri is received by parameter:
如果您使用 Android N 及以下版本,这可能会有所帮助
This thing might help if your working with android N and below