Android 快捷方式的創(chuàng)建在 7.0版本之前都是直接發(fā)廣播誓禁,并不知道創(chuàng)建成功與失敗井佑。
Intent addIntent = new Intent();
addIntent.putExtra("android.intent.extra.shortcut.INTENT", shortcutIntent); //打開(kāi)的Intent
addIntent.putExtra("android.intent.extra.shortcut.NAME", name); //名字
addIntent.putExtra("android.intent.extra.shortcut.ICON", icon); //圖標(biāo)
addIntent.setAction("com.android.launcher.action.INSTALL_SHORTCUT");
context.sendBroadcast(addIntent);
國(guó)產(chǎn)的Android手機(jī)大多默認(rèn)沒(méi)有快捷方式權(quán)限绰播,需要引導(dǎo)用戶(hù)去開(kāi)啟權(quán)限
在A(yíng)ndroid 8.0 之后仗颈,推出了用于創(chuàng)建快捷方式的Api黍瞧,并且通過(guò)廣告可以獲得創(chuàng)建的結(jié)果诸尽。
Intent shortcutIntent =new Intent();//快捷方式跳轉(zhuǎn)的Intent
ShortcutManager shortcutManager = context.getSystemService(ShortcutManager.class);
if (!shortcutManager.isRequestPinShortcutSupported()) {
return; //不支持創(chuàng)建快捷方式 PinShortcut 為我們常見(jiàn)的桌面快捷方式
}
String action = "com.deniu.shortcut.create";
BroadcastReceiver receiver = new BroadcastReceiver() {
@Override
public void onReceive(Context context, Intent intent) {
//快捷方式創(chuàng)建完成的廣播
}
};
IntentFilter filter = new IntentFilter(action);
//注冊(cè)接受結(jié)果的廣播
context.registerReceiver(receiver, filter);
//快捷方式對(duì)象
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);
//創(chuàng)建快捷方式
shortcutManager.requestPinShortcut(context, pinShortcutInfo, successCallback.getIntentSender());
這個(gè)Api 的要求版本高,可以使用兼容Api來(lái)處理印颤。
將 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());