软件编程
位置:首页>> 软件编程>> Android编程>> Android O添加桌面快捷方式的示例

Android O添加桌面快捷方式的示例

作者:Maxiye  发布时间:2022-12-27 07:53:19 

标签:Android,O,桌面快捷

手机升级到安卓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://segmentfault.com/a/1190000012846604

0
投稿

猜你喜欢

手机版 软件编程 asp之家 www.aspxhome.com