Android - 使用“设置壁纸”意图设置壁纸

时间:2014-03-06 02:48:19

标签: android

问题是herehere,但没有真正的答案。

Android具有内置的“设置壁纸”功能,当使用mime“image / jpeg”启动活动意图或长时间点击浏览器中的图像时,此功能可用。

我的问题是:如何使用文件Uri以编程方式调用内置的“设置墙纸”功能?

4 个答案:

答案 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");