我想打开一个图像从内部文件夹与android默认的图像查看器,在Nexus 7平板电脑上。我使用以下代码,但由于某种原因,图像没有显示。我做错了什么?文件的路径是:
file:///data/data/com.example.denandroidapp/files/Attachments/photoTemp/photo.jpg
(this是Uri.parse(“file://”+ file)返回的内容)。
ArticlePhoto photo = new ArticlePhoto(soapObject);
File f = new File(context.getFilesDir() + "/Attachments/photoTemp");
if(!f.exists())
f.mkdirs();
if (photo.ArtPhoto != null) {
Bitmap articlePhoto = BitmapFactory.decodeByteArray(photo.ArtPhoto, 0, photo.ArtPhoto.length);
ByteArrayOutputStream bytesFile = new ByteArrayOutputStream();
articlePhoto.compress(Bitmap.CompressFormat.JPEG, 100, bytesFile);
File file = new File(f + "/photo.jpeg");
try {
if(!file.exists())
file.createNewFile();
FileOutputStream outStream = new FileOutputStream(file);
outStream.write(bytesFile.toByteArray());
outStream.close();
Intent intent = new Intent();
intent.setAction(Intent.ACTION_VIEW);
intent.setDataAndType(Uri.parse("file://" + file),"image/jpeg");
startActivity(intent);
} catch(Exception ex) {
AlertDialog alert = new AlertDialog.Builder(context).create();
alert.setTitle("Warning!");
alert.setMessage(ex.getMessage());
alert.show();
}
}
8条答案
按热度按时间x33g5p2x1#
试试这个:
谢谢。
aor9mmx12#
问题是图像是应用程序内部的!因此外部应用程序(图像查看器)无法访问应用程序内部的数据。
您可能需要创建一个内容提供程序。http://web.archive.org/web/20111020204554/http://www.marcofaion.it/?p=7
Android清单.xml
创建意图
ycggw6v23#
如果某个文件与你的应用关联(存储在你的应用空间的内部存储上),则其他应用无法直接访问提供了有效文件路径的文件。相反,你必须创建文件提供程序并生成内容URI。
首先,在AndroidManifest.xml中添加文件提供程序
然后您需要在xml/file_paths. xml中创建一个名为file_paths的文件(默认情况下不创建目录xml,因此创建它)。
文件_路径. xml如下所示
添加尽可能多的路径,您希望您的提供程序访问。
最后你需要创建你的意图
注:确保file_paths. xml中指定的文件路径与新文件(context.getFilesDir(),“fileName”)匹配。getFilesDir()将为您提供应用的根目录。
a8jjtwal4#
utugiqy65#
您可以使用扩展ContentProvider的FileProvider
检查链接-
https://developer.android.com/reference/android/support/v4/content/FileProvider
要指定FileProvider组件本身,请向应用清单添加“provider”元素。
对于包含要为其设置内容URI的文件的每个目录,必须指定“paths”的子元素。例如,以下XML元素指定两个目录
之后,您需要为文件生成内容URI,然后调用Intent,请参阅以下链接
https://developer.android.com/reference/android/support/v4/content/FileProvider#GetUri
mtb9vblg6#
检查这个:https://stackoverflow.com/a/11088980/1038442;
PS:如果你试图打开. jpg文件,尝试替换字符串扩展名= MimeTypeMap. getFileExtensionFromUrl(文件. getName());* * 与**字符串扩展名= MimeTypeMap. getFileExtensionFromUrl(". jpg");
祝你好运。
esyap4oy7#
在我的例子中,画廊启动,但没有显示任何图像,并直接进入主页。我的情况是非常不同的OP所面临的,但我认为值得一提,因为这里的问题是关于图像没有显示通过隐含的意图。
我的问题来自下面的代码。
上面的代码告诉
PackageManager
启动应用程序的入口点,而不是显示图像的Activity。如果查看上面的Logcat,您会发现使用
cat=[android.intent.category.Launcher]
启动的Intent将转到SplashActivity
。这是因为我使用getLaunchIntentForPackage()
创建了Intent另一种方法是将
Intent
与setPackage()
一起使用,如下面中的代码所示qlfbtfca8#
代码行的小改动对我很有效。
下面的代码不起作用。