我正在尝试创建一个应用程序,然后让用户将图像设置为墙纸。我正在通过毕加索将图像保存到内部存储中。文件正在保存,我正在创建file:// URI以便与其他应用程序共享(图库应用程序将其设置为墙纸)。但问题是当我选择我想通过崩溃设置壁纸的应用程序。 (在建成的画廊和whatsapp也)。我试图记录图像文件路径并创建file:// URI路径,它们看起来不同,这是正常的我认为。但是为什么共享图片的其他应用程序崩溃了,虽然图像被保存到SD卡中。我的应用程序中的图像是否可以访问其他应用程序?如果没有做什么让他们可以访问?
下面是我的代码,我将其设置为壁纸,下面是文件图像路径和URI路径的日志。
public void setWallpaper(){
if(imageFile !=null){
Log.d("FILE",imageFile);
File file=new File(imageFile);
Uri apkURI = FileProvider.getUriForFile(
WallpaperDetailActivity.this,
BuildConfig.APPLICATION_ID + ".provider", file);
Log.d("ANURAN",apkURI.getPath()+"");
Intent intent = new Intent(Intent.ACTION_ATTACH_DATA);
intent.addCategory(Intent.CATEGORY_DEFAULT);
intent.setDataAndType(apkURI, "image/jpeg");
intent.putExtra("mimeType", "image/jpeg");
startActivityForResult(Intent.createChooser(intent,"Set As: "),100);
}
}
//日志
02-05 00:00:07.306 2303-3242/com.mranuran.animewallpapershd I/image: image saved to >>>/storage/emulated/0/AnimeWallpapersHD/758665.jpg
02-05 00:00:13.476 2303-2303/com.mranuran.animewallpapershd D/FILE: /storage/emulated/0/AnimeWallpapersHD/758665.jpg
02-05 00:00:13.478 2303-2303/com.mranuran.animewallpapershd D/ANURAN: /external_files/AnimeWallpapersHD/758665.jpg
答案 0 :(得分:1)
在Android Doc中进行了一些彻底的阅读之后,即使提供了文件URI,我也不得不在意图中添加一个标志,以使其可供其他应用程序读取。 所以我只需要一行,现在工作正常。
intent.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION);
答案 1 :(得分:0)
尝试在setDataAndType意图方法中使用Uri.fromFile(file)
的一般Uri。
所以最终的代码将是,
public void setWallpaper(){
if(imageFile !=null){
Log.d("FILE",imageFile);
File file =new File(imageFile);
Intent intent = new Intent(Intent.ACTION_ATTACH_DATA);
intent.addCategory(Intent.CATEGORY_DEFAULT);
intent.setDataAndType(Uri.fromFile(file), "image/jpeg");
intent.putExtra("mimeType", "image/jpeg");
startActivityForResult(Intent.createChooser(intent,"Set As: "),100);
}
}