【问题标题】:How to start the "set as" intent (wallpaper, contact picture, etc)如何启动“设置为”意图(壁纸、联系人图片等)
【发布时间】:2014-10-30 21:02:28
【问题描述】:

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

这是我想要的一个例子:

我确切地说我需要支持 API 级别 14 及更高级别。 我找到了getCropAndSetWallpaperIntent ,但它仅适用于 content URI,这对我来说是个问题,并且仅适用于 API lvl 19 及更高版本。

【问题讨论】:

标签: android android-intent wallpaper


【解决方案1】:

我自己找到了答案:

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。

【讨论】:

  • 使用主屏幕选项设置壁纸效果很好,但在设置锁屏选项壁纸时效果不佳。为什么?
  • 锁屏壁纸不是 Android Stock 的一部分。它通常由智能手机制造商添加。因此,我认为由制造商来为这个意图添加锁屏选项。可能需要设置一个参数来考虑这一点,但我不知道。
  • 是否有任何替代代码与本机反应相同?
【解决方案2】:

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

【讨论】:

    【解决方案3】:

    这对我有用:

    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 完成??它对我不起作用!
    猜你喜欢
    • 1970-01-01
    • 2011-11-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多