首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

Android将自定义图标设置为标记在Marshmallow中返回null

在Marshmallow(Android 6.0)中,如果尝试将自定义图标设置为应用程序的标记,可能会返回null。这是由于Android在Marshmallow中引入了运行时权限的概念,其中包括读取和写入外部存储的权限。如果应用程序没有获得适当的权限,尝试设置自定义图标将返回null。

为了解决这个问题,您可以按照以下步骤操作:

  1. 确保您的应用程序在AndroidManifest.xml文件中声明了适当的权限。对于读取和写入外部存储,您需要添加以下权限声明:
代码语言:xml
复制
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
  1. 在运行时,您需要请求这些权限。您可以使用以下代码示例请求权限:
代码语言:java
复制
private static final int REQUEST_CODE = 1;

// 请求权限
if (ContextCompat.checkSelfPermission(this, Manifest.permission.READ_EXTERNAL_STORAGE)
        != PackageManager.PERMISSION_GRANTED) {
    ActivityCompat.requestPermissions(this,
            new String[]{Manifest.permission.READ_EXTERNAL_STORAGE},
            REQUEST_CODE);
}

// 处理权限请求的结果
@Override
public void onRequestPermissionsResult(int requestCode, String[] permissions, int[] grantResults) {
    if (requestCode == REQUEST_CODE) {
        if (grantResults.length > 0 && grantResults[0] == PackageManager.PERMISSION_GRANTED) {
            // 权限已授予,可以设置自定义图标
        } else {
            // 权限被拒绝,无法设置自定义图标
        }
    }
}
  1. 在获得适当的权限后,您可以使用以下代码将自定义图标设置为应用程序的标记:
代码语言:java
复制
// 获取应用程序的包名
String packageName = getApplicationContext().getPackageName();

// 获取自定义图标的文件路径
String iconPath = Environment.getExternalStorageDirectory() + "/custom_icon.png";

// 创建ComponentName对象
ComponentName componentName = new ComponentName(packageName, packageName + ".MainActivity");

// 创建ShortcutInfo对象
ShortcutInfo shortcutInfo = new ShortcutInfo.Builder(getApplicationContext(), "shortcut_id")
        .setShortLabel("Shortcut")
        .setIcon(Icon.createWithBitmap(BitmapFactory.decodeFile(iconPath)))
        .setIntent(new Intent(Intent.ACTION_MAIN).setComponent(componentName))
        .build();

// 创建ShortcutManager对象
ShortcutManager shortcutManager = getSystemService(ShortcutManager.class);

// 动态添加快捷方式
shortcutManager.setDynamicShortcuts(Arrays.asList(shortcutInfo));

请注意,上述代码中的"custom_icon.png"是自定义图标的文件路径,您需要将其替换为您自己的图标文件路径。

这是一个解决在Marshmallow中将自定义图标设置为应用程序标记返回null的方法。通过请求适当的权限并使用ShortcutManager类,您可以成功设置自定义图标作为应用程序的标记。

腾讯云相关产品和产品介绍链接地址:

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

Android学习--跨程序共享数据之内容提供其探究

跨程序共享数据之内容提供器,这是个什么功能?看到这个名称的时候最能给我们提供信息的应该是“跨程序”这个词了,是的重点就是这个词,这个内容提供器的作用主要是用于在不同的引用程序之间实现数据共享的功能,它提供了一完整的机制,允许一个程序访问另一个程序中的数据,同时还能保证被访问的数据的安全性,在目前使用内容提供器是Android实现跨程序共享数据的标准方式。不同于文件存储和SharePreferences存储中的两种全局可读性操作模式,内容提供器可以选择只对那一部分数据进行共享,从而保证我们程序中的隐私数据不糊有泄漏的风险。

03
领券