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

我在过去的几周里(严肃地)在网上搜索过,但我找不到我需要的东西。 我只想开始一个对应于set as action的intent。 它通常提供Set as wallpaperSet as contact picture 。 然后,如果设备上安装了更多应用程序,也可以列出它们。

这是我想要的一个例子:

在此处输入图像描述

我确切地说,我需要支持API级别14及更高级别。 我find了getCropAndSetWallpaperIntent,但它仅适用于内容URI ,这对我来说是一个问题,并且只能在API lvl 19及更高版本上使用。

我自己find了答案:

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是公共的,并且可以通过用户选择的裁剪应用程序访问。

这个解决方案适用于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:")); 

这对我有用:

 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://’前缀(如果没有该前缀,则无效)。