Android具有内置的“设置壁纸”功能,当使用mime“image / jpeg”启动活动意图或长时间点击浏览器中的图像时,此功能可用。
我的问题是:如何使用文件Uri以编程方式调用内置的“设置墙纸”功能?
答案 0 :(得分:12)
似乎没有问题的答案,但我确实发现了一种解决方法:
Intent intent = new Intent(Intent.ACTION_ATTACH_DATA);
intent.addCategory(Intent.CATEGORY_DEFAULT);
intent.setDataAndType(uri, "image/jpeg");
intent.putExtra("mimeType", "image/jpeg");
this.startActivity(Intent.createChooser(intent, "Set as:"));
答案 1 :(得分:5)
仅限我工作:
Intent intent = new Intent(Intent.ACTION_ATTACH_DATA);
intent.addCategory(Intent.CATEGORY_DEFAULT);
intent.setDataAndType(uri, "image/*");
intent.putExtra("mimeType", "image/*");
this.startActivity(Intent.createChooser(intent, "Set as:"));
如果是mime" image / jpeg"应用程序未找到图像。
答案 2 :(得分:1)
如果在选择要设置墙纸的应用程序后您的应用程序崩溃,则需要添加
intent.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION);
一个典型的示例是电子邮件应用程序中的附件。对电子邮件的访问应受权限保护,因为这是敏感的用户数据。但是,如果将图像附件的URI提供给图像查看器,则该图像查看器不再具有打开附件的权限,因为它没有理由持有访问所有电子邮件的权限。
此问题的解决方案是按URI权限:启动活动或将结果返回活动时,调用方可以设置Intent.FLAG_GRANT_READ_URI_PERMISSION和/或Intent.FLAG_GRANT_WRITE_URI_PERMISSION。这授予接收活动许可访问该意图中的特定数据URI,而不管它是否有权访问与该意图相对应的内容提供程序中的数据。 https://developer.android.com/guide/topics/permissions/overview
val intent = Intent(Intent.ACTION_ATTACH_DATA)
.apply {
addCategory(Intent.CATEGORY_DEFAULT)
setDataAndType(uri, "image/*")
putExtra("mimeType", "image/*")
addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION)
}
startActivity(Intent.createChooser(intent, "Set as:"))
答案 3 :(得分:0)
仅限我工作
Intent intent = new Intent();
intent.setAction(Intent.ACTION_ATTACH_DATA);
intent.addCategory(Intent.CATEGORY_DEFAULT);
intent.setDataAndType(ContactsContract.Contacts.CONTENT_URI, "image/*");
intent.putExtra("mimeType", "image/*");
startActivityForResult(Intent.createChooser(intent, "Select service:"), position);
position
- 这是你的:getIntent().getExtras().getInt("id_test");