我一直在尝试使用Android Intent.ACTION_ATTACH_DATA为不同目的设置图像,例如壁纸,联系人照片,whatsapp个人资料。我想支持Android O而不使用WallpaperManager。所以我使用FileProvider来获取我的Uri,如下所示
var sidebar = document.querySelector(".sidebar");
for (var i = 0; i <= sidebar.length; i++) {
sidebar.addEventListener("click", function() {
this.classList.toggle('active');
});
}
setImageAs()如下所示;
File imagePath = new File(this.getExternalFilesDir(null), "images");
File newFile = new File(imagePath + File.separator + "images", "share_image" + System.currentTimeMillis() + ".jpg");
bmpUri = FileProvider.getUriForFile(this, "com.mydomain.provider", newFile);
还设置路径并根据需要提供路径。在清单中
Intent intent = new Intent(Intent.ACTION_ATTACH_DATA);
intent.addCategory(Intent.CATEGORY_DEFAULT);
intent.setData(bmpUri);
intent.putExtra("mimeType", "image/*");
intent.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION);
startActivityForResult(Intent.createChooser(intent, "Set as:"), 7575);
将res / xml文件夹中的xml文件作为
<provider
android:name="android.support.v4.content.FileProvider"
android:authorities="com.mydomain.provider"
android:exported="false"
android:grantUriPermissions="true">
<meta-data
android:name="android.support.FILE_PROVIDER_PATHS"
android:resource="@xml/provider_paths" />
</provider>
我做错了吗?如果是的话,我应该怎么做呢?我的代码适用于android api&lt; 26在引入<paths xmlns:android="http://schemas.android.com/apk/res/android">
<external-files-path
name="files"
path="images/" />
Uri.fromFile(file);
答案 0 :(得分:1)
最后通过将数据写入创建的文件来使其工作。这是我的最终代码。 (注意我在uri中创建了Temp图像文件)
File imagePath=new File(this.getExternalFilesDir(null),"images");
imagePath.mkdir();
File newFile=new File(imagePath+File.separator+"images","share_image"+System.currentTimeMillis()+".jpg");
newFile.createNewFile();
FileOutputStream fileOutputStream=new FileOutputStream(dest);
bitmap.compress(Bitmap.CompressFormat.JPEG,100,fileOutputStream);
fileOutputStream.close();
bmpUri=FileProvider.getUriForFile(this,"com.mydomain.provider",newFile);
请记得抓住IOException
和FileNotFoundException