作者:笑慢
關於生成桌面快捷方式,Android提供了原生的api方法。下邊就介紹一下兼容8.0的具體做法。
一、首先當然是關於快捷方式的權限了。
我們需要在AndroidManifest文件中添加一下權限:
<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" />
二、在需要生成桌面快捷方式處調用一下代碼
/**
* 添加快捷方式
*/
public void addShortCutCompact(Bitmap bitmap) {
//啓動器是否支持添加快捷方式
if (ShortcutManagerCompat.isRequestPinShortcutSupported(mContext)) {
Intent shortcutInfoIntent = new Intent(mContext, TestActivity.class);
//這裏直接傳一個對象報錯,現在轉成json傳過去
Gson gson = new Gson();
String json = gson.toJson(ShortcutBean);
shortcutInfoIntent.putExtra(SHORTCUT_BEAN,json );
shortcutInfoIntent.putExtra(IS_SHORTCUT, true);
//action必須設置,不然報錯
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")
//設置圖標icon
.setIcon(Icon.createWithResource(context, R.drawable.icon))
//設置名稱
.setShortLabel("快捷方式名稱")
.setIntent(shortcutInfoIntent)
.build();
//創建快捷方式
ShortcutManagerCompat.requestPinShortcut(mContext, info,null);
} else {
ToastUtil.showMsg("啓動器不支持固定快捷方式");
}
}
三、注意點
1、點擊桌面快捷方式跳轉到目標頁面就是上邊代碼例子中的TestActivity時,如果有業務需要做一些統計之類的操作,我們可以傳遞一些數據進行操作,這裏可以直接傳遞基本數據類型,但是如果想直接傳遞一個bean對象時,是不支持的,需要我們轉成json傳遞。
2、shortcutInfoIntent.setAction(Intent.ACTION_VIEW);是必須設置的。
3、桌面快捷方式的圖標不支持網絡地址圖片,如果想要從接口獲取動態設置需要先下載下來爲一個bitmap。
用setIcon(IconCompat.createWithBitmap(bitmap))方法來設置。
關於下載網絡圖片我們有很多方法,這裏是用glide下載,列子代碼:
/**
* 下載快捷方式icon
*/
private void downShortcutICon() {
final Bitmap[] bitmap = new Bitmap[1];
//先下載圖標 轉爲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"標籤,這個標籤是用來表示是否能夠被其他應用程序組件調用或跟它交互。
5、另外,如小米、vivo等一些機型需要在設置中手動打開 創建桌面快捷方式權限。
感謝大家能耐着性子看完
在這裏小編也分享一份自己收錄整理的Android學習PDF+架構視頻+面試文檔+源碼筆記,還有高級架構技術進階腦圖、Android開發面試專題資料,高級進階架構資料幫助大家學習提升進階,也節省大家在網上搜索資料的時間來學習,也可以分享給身邊好友一起學習
如果你有需要的話,可以點贊+評論,關注我,然後加我VX:15388039515 我發給你
(或關注微信公衆號“Android開發之家”回覆【資料】免費領取)