Android O添加桌面快捷方式

手機升級到安卓O後,忽然發現建立快捷方式的功能失效了,查詢一番後發現:安卓O要使用ShortcutManager來建立快捷方式。
安卓N及如下版本:android

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);
    }

}
相關文章
相關標籤/搜索