如何启动“设置为”意图(壁纸、联系人图片等)

5
我在过去几周里(认真地)在网上搜索,但找不到我需要的东西。我只想启动与“设置为”操作相对应的意图。它通常提供“设置为壁纸”或“设置为联系人图片”。然后,如果设备上安装了更多应用程序,它们也可以列出来。
以下是我想要的示例:

enter image description here

我需要支持API 14及更高版本。我找到了getCropAndSetWallpaperIntent,但它只适用于内容URI,这对我来说是个问题,并且仅在API级别19及更高版本上可用。

可能是重复的问题:android如何将图片设置为联系人头像/壁纸 - cygery
3个回答

12

我自己找到了答案:

Intent intent = new Intent(Intent.ACTION_ATTACH_DATA);
intent.setDataAndType(imageUri, "image/*");
intent.putExtra("jpg", "image/*");
startActivityForResult(Intent.createChooser(intent,
getString(R.string.set_as)), REQUEST_ID_SET_AS_WALLPAPER);

您只需确保URI是公共的,并且将可由用户选择的裁剪应用程序访问。


在设置主屏幕选项的壁纸方面,它运行良好,但在设置锁定屏幕选项的壁纸方面,它运行不佳。为什么? - Gaurav Arora
1
锁屏壁纸不是Android原生功能,通常由智能手机制造商添加。因此,我认为是否在此意图中添加锁屏选项取决于制造商。可能有一些参数需要设置以考虑这一点,但我并不知道具体情况。 - kalvn
有没有在React Native中具有相同功能的替代代码? - Mayur Kukadiya

1
这对我有用:

这个对我有用:

Intent intent = new Intent(Intent.ACTION_ATTACH_DATA);
intent.addCategory(Intent.CATEGORY_DEFAULT);
//can't use normal URI, because it requires the Uri from file
intent.setDataAndType(Uri.fromFile(new File(uriOfImage)),"image/*");
intent.putExtra("mimeType","image/*");
startActivity(Intent.createChooser(intent,"Set Image"));

您需要检查传递的URI是否包含“file://”前缀(没有前缀会导致无法工作)。


使用FileProvider.getUriForFile无法完成吗?对我来说它不起作用! - Osvel Alvarez Jacomino

1
这个解决方案对我在Uri上起了作用:

Intent intent = new Intent(Intent.ACTION_ATTACH_DATA);
intent.setDataAndType(contentUri, "image/*");
intent.putExtra("mimeType", "image/*");
intent.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION);
startActivity(Intent.createChooser(
                        intent, "Set as:"));

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接