android 如何删除应用程序快捷方式图标中的徽章?

xpcnnkqh  于 2022-12-31  发布在  Android
关注(0)|答案(7)|浏览(318)


如何在Android中移除应用快捷方式图标中的徽章?当我以编程方式创建应用快捷方式时,随着为快捷方式指定的图标,应用图标出现在图标的右下角。我不想要那个徽章。
下面是我使用的代码

public static void addShortcutToHomeScreen(Context context)
{
    if (ShortcutManagerCompat.isRequestPinShortcutSupported(context))
    {
        ShortcutInfoCompat shortcutInfo = new ShortcutInfoCompat.Builder(context, "#1")
                .setIntent(new Intent(context, Splash.class).setAction(Intent.ACTION_MAIN)) // !!! intent's action must be set on oreo
                .setShortLabel("Test")
                .setIcon(IconCompat.createWithResource(context, R.drawable.logo))
                .build();
        ShortcutManagerCompat.requestPinShortcut(context, shortcutInfo, null);
    }
    else
    {
        // Shortcut is not supported by your launcher
    }
}
nxowjjhe

nxowjjhe1#

不,没有办法。这些额外的选项是由启动程序添加的,而不是你的应用本身。显然,如果你的应用不可能被卸载,卸载选项将不存在(例如,它的系统应用)。

lawou6xi

lawou6xi2#

ShortcutInfo没有这样的选项nor ShortcutManager.它依赖于启动器并且它应该显示用户将知道在哪个应用程序中它将打开的这个标记.没有这个图标有没有选项来识别哪个应用程序添加了它(除了打开),那不是那么用户友好...例如,你可以通过添加例如FB图标和“Facebook”快捷方式名称来模拟另一个应用程序,此快捷方式打开的Activity可能是伪造的登录界面,简而言之:出于安全原因,该图标在/应该在那里
在我的启动器长按立即开始移动快捷方式(没有下拉菜单作为启动器图标),我没有屏幕顶部的“应用程序信息”选项(在“移动模式”),只有“删除”
也许可以考虑添加一个AppWidget样式的启动器图标和应用程序名称?自API 25以来,快捷方式可用,小部件从开始就有,自API 26以来,您可以请求PinAppWidget(与添加快捷方式的对话框样式相似)

hgqdbh6s

hgqdbh6s3#

通过Widget屏幕**(类似于this video)添加快捷方式(非应用Widget)**可能是一种解决方案。创建过滤<action android:name="android.intent.action.CREATE_SHORTCUT" />的Activity,然后在该Activity中手动创建Intent.EXTRA_SHORTCUT_INTENT Intent(而不是通过shortcutManager.createShortcutResultIntent())并返回setResult()来创建快捷方式。
详情请参见this answer请注意,使用不同的启动器时,实际行为可能仍会有所不同(可能在某些启动器下无法工作)我只在Android 11和Android 12下使用Pixel Launcher和Microsoft Launcher进行了测试。

ryhaxcpt

ryhaxcpt4#

首先从PlayStore下载图标包(加载可供选择)。返回到带有违规图标的屏幕。按住要更改的图标(有额外Chrome标志的那个)然后按编辑。按更改图标。它会给予你从图标包中选择的选项,所以按那个。然后你会有很多图标可供选择,所以选择一个最能代表当前图标的图标或选择一些完全不同的图标。然后点击“确定”。它会更改图标,并且没有额外的徽章。

col17t5w

col17t5w5#

试试这个可能适合你。mChannel.setShowBadge(false);

String id = "my_channel_01";
CharSequence name = getString(R.string.channel_name);
String description = getString(R.string.channel_description);
int importance = NotificationManager.IMPORTANCE_LOW;
NotificationChannel mChannel = new NotificationChannel(id, name, importance);
mChannel.setDescription(description);
mChannel.setShowBadge(false);

NotificationManager notificationManager =
        (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE);
notificationManager.createNotificationChannel(mChannel);
bvjxkvbb

bvjxkvbb6#

在Manifest.xml中添加以下行

<uses-permission android:name="com.android.launcher.permission.INSTALL_SHORTCUT" />

用于在桌面上创建快捷方式的代码,

private void addShortcut() {
        //Adding shortcut for MainActivity
        //on Home screen
        Intent shortcutIntent = new Intent(getApplicationContext(), BottomNavigationActivity.class);
        shortcutIntent.setAction(Intent.ACTION_MAIN);

        Intent addIntent = new Intent();
        addIntent.putExtra(Intent.EXTRA_SHORTCUT_INTENT, shortcutIntent);
        addIntent.putExtra(Intent.EXTRA_SHORTCUT_NAME, "My Shortcut");
        addIntent.putExtra(Intent.EXTRA_SHORTCUT_ICON_RESOURCE,
                Intent.ShortcutIconResource.fromContext(getApplicationContext(),
                        R.drawable.alert_clock));
        addIntent.putExtra("duplicate", false);
        addIntent.setAction("com.android.launcher.action.INSTALL_SHORTCUT");
        getApplicationContext().sendBroadcast(addIntent);

    }
jv4diomz

jv4diomz7#

private void createNotificationChannel() {
    // Create the NotificationChannel, but only on API 26+ because
    // the NotificationChannel class is new and not in the support library
    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
        CharSequence name = getString(R.string.channel_name);
        String description = getString(R.string.channel_description);
        int importance = NotificationManager.IMPORTANCE_DEFAULT;
        NotificationChannel channel = new NotificationChannel(CHANNEL_ID, name, importance);
        channel.setDescription(description);
         channel.setShowBadge(false)

        NotificationManager notificationManager = getSystemService(NotificationManager.class);
        notificationManager.createNotificationChannel(channel);
    }
}

相关问题