android - 在 Android 8 (Oreo) 中,Intent Chooser 无法设置 WallPaper

标签 android android-intent android-8.0-oreo android-wallpaper

我正在使用以下代码 fragment 来设置墙纸。在低于 Android 8 (Oreo) 的所有版本中,它显示一个选择器来选择锁定屏幕或主屏幕或两者等。但在 Android 8 中,它直接在主屏幕上设置壁纸而无需任何确认。 Oreo 是否有任何更新或代码有问题?

        Uri sendUri2 = Uri.fromFile(externalFile);

        Intent intent1 = new Intent(Intent.ACTION_ATTACH_DATA);
        intent1.setDataAndType(sendUri2,type);
        intent1.putExtra("mimeType",type);
        intent1.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION);

        startActivityForResult(Intent.createChooser(intent1, "Set As"), 200);

最佳答案

try {
        Intent intent = new Intent();
        intent.setAction(Intent.ACTION_ATTACH_DATA);
        File file = new File(path_of_file);
        intent.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION);
        intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_WHEN_TASK_RESET);
        intent.setDataAndType(FileProvider.getUriForFile(context, BuildConfig.APPLICATION_ID + ".provider", file), getMimeType(path_of_file);
        context.startActivity(intent);
    } catch (ActivityNotFoundException e) {
        Toast.makeText(context, "Exception generated", Toast.LENGTH_SHORT).show();
    }
}


 private static String getMimeType(String url) {
    String type = null;
    String extension = MimeTypeMap.getFileExtensionFromUrl(url);
    if (extension != null) {
        type = MimeTypeMap.getSingleton().getMimeTypeFromExtension(extension);
    }
    return type;
}

关于android - 在 Android 8 (Oreo) 中,Intent Chooser 无法设置 WallPaper,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51546617/

相关文章:

visual-studio - 在 Visual Studio Android O (API 26) 上调试 Xamarin

Java 集合排序 BigDecimal

android - FCM token 检索失败 RST

android - 验证后写入NTAG216?

android - 前台 android 通知未显示(奥利奥)

android - 由于 FirebaseInstanceIdReceiver 中的 Intent { act=com.google.android.c2dm.intent.RECEIVE 广播而导致 ANR

java - Gson如何解析自定义字段

android - 在 Android 中,我如何指定哪个 Activity 应该处理我的 Intent

java - “欺骗” Intent 的额外内容

android - 如何从 Android 中的 jar 文件调用 Activity ?