建立,刪除快捷圖示shortcut android .
在manifest.xml中,新增許可權:
<uses-permission android:name="com.android.launcher.permission.INSTALL_SHORTCUT" />
<uses-permission android:name="com.android.launcher.permission.UNINSTALL_SHORTCUT" />
程式碼如下:
- private void uninstallShortcut(){
- Intent shortcut = new Intent("com.android.launcher.action.UNINSTALL_SHORTCUT");
- //com.android.launcher.action.UNINSTALL_SHORTCUT
- //快捷方式的名稱
- shortcut.putExtra(Intent.EXTRA_SHORTCUT_NAME, getString(R.string.app_name));
- shortcut.putExtra("duplicate", false);
- Intent intent = new Intent(Intent.ACTION_MAIN);
- intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
- intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
- intent.setClass(getApplicationContext(), MainActivity.class);
- shortcut.putExtra(Intent.EXTRA_SHORTCUT_INTENT,intent);
- sendBroadcast(shortcut);
- }
- private void installShortcut(){
- Log.i("CreateShortcutActivity","onclick to create shortcut");
- Intent shortcutIntent = new Intent("com.android.launcher.action.INSTALL_SHORTCUT");
- shortcutIntent.putExtra(Intent.EXTRA_SHORTCUT_NAME,getString(R.string.app_name));
- shortcutIntent.putExtra("duplicate", false);
- Intent intent = new Intent(Intent.ACTION_MAIN);
- intent.setClass(getApplicationContext(), MainActivity.class);
- shortcutIntent.putExtra(Intent.EXTRA_SHORTCUT_INTENT, intent);
- shortcutIntent.putExtra(Intent.EXTRA_SHORTCUT_ICON_RESOURCE,
- Intent.ShortcutIconResource.fromContext(CreateShortcutActivity.this,
- R.drawable.ic_shortcut));
- sendBroadcast(shortcutIntent);
- }
private void uninstallShortcut(){
Intent shortcut = new Intent("com.android.launcher.action.UNINSTALL_SHORTCUT");
//com.android.launcher.action.UNINSTALL_SHORTCUT
//快捷方式的名稱
shortcut.putExtra(Intent.EXTRA_SHORTCUT_NAME, getString(R.string.app_name));
shortcut.putExtra("duplicate", false);
Intent intent = new Intent(Intent.ACTION_MAIN);
intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
intent.setClass(getApplicationContext(), MainActivity.class);
shortcut.putExtra(Intent.EXTRA_SHORTCUT_INTENT,intent);
sendBroadcast(shortcut);
}
private void installShortcut(){
Log.i("CreateShortcutActivity","onclick to create shortcut");
Intent shortcutIntent = new Intent("com.android.launcher.action.INSTALL_SHORTCUT");
shortcutIntent.putExtra(Intent.EXTRA_SHORTCUT_NAME,getString(R.string.app_name));
shortcutIntent.putExtra("duplicate", false);
Intent intent = new Intent(Intent.ACTION_MAIN);
intent.setClass(getApplicationContext(), MainActivity.class);
shortcutIntent.putExtra(Intent.EXTRA_SHORTCUT_INTENT, intent);
shortcutIntent.putExtra(Intent.EXTRA_SHORTCUT_ICON_RESOURCE,
Intent.ShortcutIconResource.fromContext(CreateShortcutActivity.this,
R.drawable.ic_shortcut));
sendBroadcast(shortcutIntent);
}
在android中,有InstallShortcutReceiver,和UninstallShortcutReceiver兩個類,用來接收該廣播。
注意:shortcutIntent.putExtra(Intent.EXTRA_SHORTCUT_INTENT, intent);
在InstallShortcutReceiver中,如果intent沒有設定action的話,會新增Intent.ACTION_VIEW,造成在Remove shortcut的時候,比較兩個Intent時,可能不一致而無法刪除該shortcut.
所以,建議要自己新增ACTION.
附上android Intent.filterEquals().就是這方法用來比較前後兩個Intent的,
- /**
- * Determine if two intents are the same for the purposes of intent
- * resolution (filtering). That is, if their action, data, type,
- * class, and categories are the same. This does <em>not</em> compare
- * any extra data included in the intents.
- *
- * @param other The other Intent to compare against.
- *
- * @return Returns true if action, data, type, class, and categories
- * are the same.
- */
- public boolean filterEquals(Intent other) {
- if (other == null) {
- return false;
- }
- if (mAction != other.mAction) {
- if (mAction != null) {
- if (!mAction.equals(other.mAction)) {
- return false;
- }
- } else {
- if (!other.mAction.equals(mAction)) {
- return false;
- }
- }
- }
- if (mData != other.mData) {
- if (mData != null) {
- if (!mData.equals(other.mData)) {
- return false;
- }
- } else {
- if (!other.mData.equals(mData)) {
- return false;
- }
- }
- }
- if (mType != other.mType) {
- if (mType != null) {
- if (!mType.equals(other.mType)) {
- return false;
- }
- } else {
- if (!other.mType.equals(mType)) {
- return false;
- }
- }
- }
- if (mPackage != other.mPackage) {
- if (mPackage != null) {
- if (!mPackage.equals(other.mPackage)) {
- return false;
- }
- } else {
- if (!other.mPackage.equals(mPackage)) {
- return false;
- }
- }
- }
- if (mComponent != other.mComponent) {
- if (mComponent != null) {
- if (!mComponent.equals(other.mComponent)) {
- return false;
- }
- } else {
- if (!other.mComponent.equals(mComponent)) {
- return false;
- }
- }
- }
- if (mCategories != other.mCategories) {
- if (mCategories != null) {
- if (!mCategories.equals(other.mCategories)) {
- return false;
- }
- } else {
- if (!other.mCategories.equals(mCategories)) {
- return false;
- }
- }
- }
- return true;
- }
/**
* Determine if two intents are the same for the purposes of intent
* resolution (filtering). That is, if their action, data, type,
* class, and categories are the same. This does <em>not</em> compare
* any extra data included in the intents.
*
* @param other The other Intent to compare against.
*
* @return Returns true if action, data, type, class, and categories
* are the same.
*/
public boolean filterEquals(Intent other) {
if (other == null) {
return false;
}
if (mAction != other.mAction) {
if (mAction != null) {
if (!mAction.equals(other.mAction)) {
return false;
}
} else {
if (!other.mAction.equals(mAction)) {
return false;
}
}
}
if (mData != other.mData) {
if (mData != null) {
if (!mData.equals(other.mData)) {
return false;
}
} else {
if (!other.mData.equals(mData)) {
return false;
}
}
}
if (mType != other.mType) {
if (mType != null) {
if (!mType.equals(other.mType)) {
return false;
}
} else {
if (!other.mType.equals(mType)) {
return false;
}
}
}
if (mPackage != other.mPackage) {
if (mPackage != null) {
if (!mPackage.equals(other.mPackage)) {
return false;
}
} else {
if (!other.mPackage.equals(mPackage)) {
return false;
}
}
}
if (mComponent != other.mComponent) {
if (mComponent != null) {
if (!mComponent.equals(other.mComponent)) {
return false;
}
} else {
if (!other.mComponent.equals(mComponent)) {
return false;
}
}
}
if (mCategories != other.mCategories) {
if (mCategories != null) {
if (!mCategories.equals(other.mCategories)) {
return false;
}
} else {
if (!other.mCategories.equals(mCategories)) {
return false;
}
}
}
return true;
}
可見,flag屬性是不在比較之列的,可以任意新增
相關文章
- Android建立快捷圖示Android
- win10 怎麼清除快捷圖示_win10怎麼刪除快捷小圖示Win10
- Mac 刪除 Steam 遊戲圖示Mac遊戲
- win10 如何把快捷鍵的標誌刪除_win10要怎樣刪除桌面上的快捷方式圖示Win10
- win10 移除快捷方式的圖示怎麼操作_win10怎樣刪除桌面上的快捷方式圖示Win10
- win10怎樣新增USB快捷刪除鍵_win10新增USB快捷刪除鍵的圖文教程Win10
- 快捷圖示變成白圖示
- win10更新右下角圖示怎麼刪除_win10如何把右下角圖示刪除Win10
- 如何從Windows桌面刪除未使用的圖示Windows
- MongoDB 資料庫建立刪除、表(集合)建立刪除、資料增刪改查MongoDB資料庫
- Win10如何新增usb快捷刪除鍵?Win10新增usb快捷刪除鍵教程Win10
- cad刪除快捷鍵命令 cad刪除有幾種方式
- Win10回收站圖示怎麼刪除Win10
- 建立元素和刪除元素
- Git分支建立和刪除Git
- JavaScript 建立和刪除元素JavaScript
- Oracle序列使用:建立、刪除Oracle
- openGauss 建立-刪除MOT
- jQuery中點選刪除,顯示是否要刪除jQuery
- win10刪除檔案後圖示不消失怎麼辦_win10刪除檔案後圖示不消失解決方法Win10
- ubuntu 快捷新增和刪除環境變數Ubuntu變數
- Mysql索引的建立與刪除MySql索引
- elasticsearch(三)----索引建立與刪除Elasticsearch索引
- [MYSQL][1]建立,修改,刪除表MySql
- git分支建立刪除,打tagGit
- oracle job的建立和刪除Oracle
- win10 此電腦中的圖示怎麼刪除 win10刪除此電腦裡的圖示方法Win10
- oracle建立/刪除表空間、建立/刪除使用者並賦予許可權Oracle
- win10桌面上的ie圖示為什麼刪除不掉_win10桌面上的ie圖示刪除不掉怎麼回事Win10
- Android 7.0新特性——桌面長按圖示出現快捷方式Android
- android隨筆:長按APP圖示彈出快捷方式(shortcuts)AndroidAPP
- Mac如何移動隱藏刪除mac選單欄圖示Mac
- win10系統怎麼刪除工作列onedrive圖示Win10
- ubuntu 建立和刪除使用者Ubuntu
- mysql 建立和刪除聯合索引MySql索引
- [MYSQL] 資料庫建立與刪除MySql資料庫
- Android7-1圖示快捷方式(AppShortcuts)實現DemoAndroidAPP
- Windows10系統怎麼刪除工作列無效圖示Windows