资讯专栏INFORMATION COLUMN

Android O添加桌面快捷方式

Reducto / 2197人阅读

摘要:手机升级到安卓后,突然发现创建快捷方式的功能失效了,查询一番后发现安卓要使用来创建快捷方式。

手机升级到安卓O后,突然发现创建快捷方式的功能失效了,查询一番后发现:安卓O要使用ShortcutManager来创建快捷方式。
安卓N及以下版本:

Intent addShortcutIntent = new Intent("com.android.launcher.action.INSTALL_SHORTCUT");//"com.android.launcher.action.INSTALL_SHORTCUT"
// 不允许重复创建
addShortcutIntent.putExtra("duplicate", false);// 经测试不是根据快捷方式的名字判断重复的
// 应该是根据快链的Intent来判断是否重复的,即Intent.EXTRA_SHORTCUT_INTENT字段的value
// 但是名称不同时,虽然有的手机系统会显示Toast提示重复,仍然会建立快链
// 屏幕上没有空间时会提示
// 注意:重复创建的行为MIUI和三星手机上不太一样,小米上似乎不能重复创建快捷方式

// 名字
addShortcutIntent.putExtra(Intent.EXTRA_SHORTCUT_NAME, "网络设置");
// 图标
addShortcutIntent.putExtra(Intent.EXTRA_SHORTCUT_ICON_RESOURCE,
        Intent.ShortcutIconResource.fromContext(this, R.drawable.ic_perm_data_setting_black_24dp));

// 设置关联程序
Intent launcherIntent = new Intent(Settings.ACTION_DATA_ROAMING_SETTINGS);//设置网络页面intent
// 设置关联程序
// Intent launcherIntent = new Intent(Intent.ACTION_MAIN);
// launcherIntent.setClass(MainActivity.this, MainActivity.class);
// launcherIntent.addCategory(Intent.CATEGORY_LAUNCHER);
addShortcutIntent.putExtra(Intent.EXTRA_SHORTCUT_INTENT, launcherIntent);

// 发送广播
sendBroadcast(addShortcutIntent);

安卓O:

ShortcutManager scm = (ShortcutManager) getSystemService(SHORTCUT_SERVICE);
Intent launcherIntent = new Intent(Settings.ACTION_DATA_ROAMING_SETTINGS);//设置网络页面intent
ShortcutInfo si = new ShortcutInfo.Builder(this, "dataroam")
        .setIcon(Icon.createWithResource(this, R.drawable.ic_perm_data_setting_black_24dp))
        .setShortLabel("网络设置")
        .setIntent(launcherIntent)
        .build();
assert scm != null;
scm.requestPinShortcut(si, null);

那如果要两者兼顾呢,则可以如下这样写:

//添加快捷方式
private void addShortcut() {
    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
        ShortcutManager scm = (ShortcutManager) getSystemService(SHORTCUT_SERVICE);
        Intent launcherIntent = new Intent(Settings.ACTION_DATA_ROAMING_SETTINGS);//设置网络页面intent
        ShortcutInfo si = new ShortcutInfo.Builder(this, "dataroam")
                .setIcon(Icon.createWithResource(this, R.drawable.ic_perm_data_setting_black_24dp))
                .setShortLabel("网络设置")
                .setIntent(launcherIntent)
                .build();
        assert scm != null;
        scm.requestPinShortcut(si, null);
    } else {
        Intent addShortcutIntent = new Intent("com.android.launcher.action.INSTALL_SHORTCUT");//"com.android.launcher.action.INSTALL_SHORTCUT"
        // 不允许重复创建
        addShortcutIntent.putExtra("duplicate", false);// 经测试不是根据快捷方式的名字判断重复的
        // 应该是根据快链的Intent来判断是否重复的,即Intent.EXTRA_SHORTCUT_INTENT字段的value
        // 但是名称不同时,虽然有的手机系统会显示Toast提示重复,仍然会建立快链
        // 屏幕上没有空间时会提示
        // 注意:重复创建的行为MIUI和三星手机上不太一样,小米上似乎不能重复创建快捷方式

        // 名字
        addShortcutIntent.putExtra(Intent.EXTRA_SHORTCUT_NAME, "网络设置");
        // 图标
        addShortcutIntent.putExtra(Intent.EXTRA_SHORTCUT_ICON_RESOURCE,
                Intent.ShortcutIconResource.fromContext(this, R.drawable.ic_perm_data_setting_black_24dp));

        // 设置关联程序
        Intent launcherIntent = new Intent(Settings.ACTION_DATA_ROAMING_SETTINGS);//设置网络页面intent
        // 设置关联程序
//        Intent launcherIntent = new Intent(Intent.ACTION_MAIN);
//        launcherIntent.setClass(MainActivity.this, MainActivity.class);
//        launcherIntent.addCategory(Intent.CATEGORY_LAUNCHER);
        addShortcutIntent.putExtra(Intent.EXTRA_SHORTCUT_INTENT, launcherIntent);

        // 发送广播
        sendBroadcast(addShortcutIntent);
    }

}

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/68239.html

相关文章

  • Android7.1图标快捷方式(AppShortcuts)实现Demo

    摘要:今天给手上的手机升级系统至体验了一下新功能图标快捷方式如下图所示如何实现这样的快捷方式呢官方给出的实现步骤分类图标快捷方式分为两种静态快捷方式动态快捷方式静态快捷方式是写在文件中而动态快捷方式是在代码中编写实现环境要求只有及以上手机才能使用 今天给手上的Nexus6P手机升级系统至Android7.1,体验了一下新功能:App Shortcuts(图标快捷方式),如下图所示: show...

    afishhhhh 评论0 收藏0

发表评论

0条评论

最新活动
阅读需要支付1元查看
<