Android 快捷方式的创建在 7.0版本之前都是直接发广播,并不知道创建成功与失败。
Intent addIntent = new Intent();
addIntent.putExtra("android.intent.extra.shortcut.INTENT", shortcutIntent); //打开的Intent
addIntent.putExtra("android.intent.extra.shortcut.NAME", name); //名字
addIntent.putExtra("android.intent.extra.shortcut.ICON", icon); //图标
addIntent.setAction("com.android.launcher.action.INSTALL_SHORTCUT");
context.sendBroadcast(addIntent);
国产的Android手机大多默认没有快捷方式权限,需要引导用户去开启权限
在Android 8.0 之后,推出了用于创建快捷方式的Api,并且通过广告可以获得创建的结果。
Intent shortcutIntent =new Intent();//快捷方式跳转的Intent
ShortcutManager shortcutManager = context.getSystemService(ShortcutManager.class);
if (!shortcutManager.isRequestPinShortcutSupported()) {
return; //不支持创建快捷方式 PinShortcut 为我们常见的桌面快捷方式
}
String action = "com.deniu.shortcut.create";
BroadcastReceiver receiver = new BroadcastReceiver() {
@Override
public void onReceive(Context context, Intent intent) {
//快捷方式创建完成的广播
}
};
IntentFilter filter = new IntentFilter(action);
//注册接受结果的广播
context.registerReceiver(receiver, filter);
//快捷方式对象
ShortcutInfo pinShortcutInfo = new ShortcutInfo.Builder(context,id) //id
.setLongLabel(appName)
.setShortLabel(appName)
.setIcon(Icon.createWithBitmap(icon))
.setIntent(shortcutIntent)
.build();
//PendingIntent
Intent pinnedShortcutCallbackIntent = new Intent(action);
PendingIntent successCallback = PendingIntent.getBroadcast(context, 0,
pinnedShortcutCallbackIntent, PendingIntent.FLAG_UPDATE_CURRENT);
//创建快捷方式
shortcutManager.requestPinShortcut(context, pinShortcutInfo, successCallback.getIntentSender());
这个Api 的要求版本高,可以使用兼容Api来处理。
将 ShortcutInfo,ShortcutManager 都换成 ShortcutManagerCompat、ShortcutInfoCompat 即可。
ShortcutManagerCompat.isRequestPinShortcutSupported(context);
ShortcutInfoCompat pinShortcutInfo = new ShortcutInfoCompat.Builder(context,id)
.setLongLabel(appName)
.setShortLabel(appName)
.setIcon(IconCompat.createWithBitmap(icon))
.setIntent(shortcutIntent)
.build();
ShortcutManagerCompat.requestPinShortcut(context,
pinShortcutInfo,
successCallback.getIntentSender());
网友评论