關(guān)于生成桌面快捷方式,Android提供了原生的api方法挤茄。下邊就介紹一下兼容8.0的具體做法尺碰。
一、首先當(dāng)然是關(guān)于快捷方式的權(quán)限了歇攻。
我們需要在AndroidManifest文件中添加以下權(quán)限:
<uses-permission android:name="com.android.launcher.permission.WRITE_SETTINGS" />
<!-- 添加快捷方式 -->
<uses-permission android:name="com.android.launcher.permission.INSTALL_SHORTCUT" />
<!-- 移除快捷方式 -->
<uses-permission android:name="com.android.launcher.permission.UNINSTALL_SHORTCUT" />
<!-- 查詢快捷方式 -->
<uses-permission android:name="com.android.launcher.permission.READ_SETTINGS" />
二固惯、在需要生成桌面快捷方式處調(diào)用以下代碼
/**
* 添加快捷方式
*/
public void addShortCutCompact(Bitmap bitmap) {
//啟動(dòng)器是否支持添加快捷方式
if (ShortcutManagerCompat.isRequestPinShortcutSupported(mContext)) {
Intent shortcutInfoIntent = new Intent(mContext, TestActivity.class);
//這里直接傳一個(gè)對象報(bào)錯(cuò),現(xiàn)在轉(zhuǎn)成json傳過去
Gson gson = new Gson();
String json = gson.toJson(ShortcutBean);
shortcutInfoIntent.putExtra(SHORTCUT_BEAN,json );
shortcutInfoIntent.putExtra(IS_SHORTCUT, true);
//action必須設(shè)置缴守,不然報(bào)錯(cuò)
shortcutInfoIntent.setAction(Intent.ACTION_VIEW);
shortcutInfoIntent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
shortcutInfoIntent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
ShortcutInfoCompat info = new ShortcutInfoCompat.Builder(mContext, "mama_id")
//設(shè)置圖標(biāo)icon
.setIcon(Icon.createWithResource(context, R.drawable.icon))
//設(shè)置名稱
.setShortLabel("快捷方式名稱")
.setIntent(shortcutInfoIntent)
.build();
//創(chuàng)建快捷方式
ShortcutManagerCompat.requestPinShortcut(mContext, info,null);
} else {
ToastUtil.showMsg("啟動(dòng)器不支持固定快捷方式");
}
}
三葬毫、注意點(diǎn)
1镇辉、點(diǎn)擊桌面快捷方式跳轉(zhuǎn)到目標(biāo)頁面就是上邊代碼例子中的TestActivity時(shí),如果有業(yè)務(wù)需要做一些統(tǒng)計(jì)之類的操作贴捡,我們可以傳遞一些數(shù)據(jù)進(jìn)行操作忽肛,這里可以直接傳遞基本數(shù)據(jù)類型,但是如果想直接傳遞一個(gè)bean對象時(shí)烂斋,是不支持的屹逛,需要我們轉(zhuǎn)成json傳遞。
2汛骂、shortcutInfoIntent.setAction(Intent.ACTION_VIEW);是必須設(shè)置的罕模。
3、桌面快捷方式的圖標(biāo)不支持網(wǎng)絡(luò)地址圖片帘瞭,如果想要從接口獲取動(dòng)態(tài)設(shè)置需要先下載下來為一個(gè)bitmap淑掌。用setIcon(IconCompat.createWithBitmap(bitmap))方法來設(shè)置。
關(guān)于下載網(wǎng)絡(luò)圖片我們有很多方法蝶念,這里是用glide下載抛腕,列子代碼:
/**
* 下載快捷方式icon
*/
private void downShortcutICon() {
final Bitmap[] bitmap = new Bitmap[1];
//先下載圖標(biāo) 轉(zhuǎn)為bitMap
Glide.with(mContext).asBitmap().load(addIcon.getAppIcon()).into(new SimpleTarget() {
@Override
public void onResourceReady(@NonNull Object resource, @Nullable Transition transition) {
bitmap[0] = (Bitmap) resource;
if (bitmap[0] != null) {
addShortCutCompact(bitmap[0]);
}
}
});
}
4、需要在AndroidManifest中的TestActivity注冊中加入 android:exported="true"標(biāo)簽媒殉,這個(gè)標(biāo)簽是用來表示是否能夠被其他應(yīng)用程序組件調(diào)用或跟它交互担敌。
5、另外廷蓉,如小米全封、vivo等一些機(jī)型需要在設(shè)置中手動(dòng)打開 創(chuàng)建桌面快捷方式權(quán)限。