手機升級到安卓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); } }