Android 建立/驗證/刪除案頭捷徑(已測試可用)

來源:互聯網
上載者:User

測試環境為Adnroid 2.1以上。
第一步:AndroidManifest.xml 許可權配置:
添加捷徑許可權: 複製代碼 代碼如下:<uses-permission android:name="com.android.launcher.permission.INSTALL_SHORTCUT"/>

驗證捷徑是否存在許可權: 複製代碼 代碼如下:<uses-permission android:name="com.android.launcher.permission.READ_SETTINGS" />

刪除捷徑許可權: 複製代碼 代碼如下:<uses-permission android:name="com.android.launcher.permission.UNINSTALL_SHORTCUT" />

代碼: 複製代碼 代碼如下:public class ShortCutSample {
/**
* 添加捷徑
* */
public void creatShortCut(Activity activity,String shortcutName,int resourceId)
{
Intent intent = new Intent();
intent.setClass(activity, activity.getClass());
/*以下兩句是為了在卸載應用的時候同時刪除案頭捷徑*/
intent.setAction("android.intent.action.MAIN");
intent.addCategory("android.intent.category.LAUNCHER");
Intent shortcutintent = new Intent("com.android.launcher.action.INSTALL_SHORTCUT");
//不允許重複建立
shortcutintent.putExtra("duplicate", false);
//需要現實的名稱
shortcutintent.putExtra(Intent.EXTRA_SHORTCUT_NAME, shortcutName);
//快捷圖片
Parcelable icon = Intent.ShortcutIconResource.fromContext(activity.getApplicationContext(), resourceId);
shortcutintent.putExtra(Intent.EXTRA_SHORTCUT_ICON_RESOURCE, icon);
//點擊快捷圖片,啟動並執行程式主入口
shortcutintent.putExtra(Intent.EXTRA_SHORTCUT_INTENT, intent);
//發送廣播。OK
activity.sendBroadcast(shortcutintent);
}
/**
* 刪除捷徑
* */
public void deleteShortCut(Activity activity,String shortcutName)
{
Intent shortcut = new Intent("com.android.launcher.action.UNINSTALL_SHORTCUT");
//捷徑的名稱
shortcut.putExtra(Intent.EXTRA_SHORTCUT_NAME,shortcutName);
//在網上看到到的基本都是一下幾句,測試的時候發現並不能刪除捷徑。
//String appClass = activity.getPackageName()+"."+ activity.getLocalClassName();
//ComponentName comp = new ComponentName( activity.getPackageName(), appClass);
//shortcut.putExtra(Intent.EXTRA_SHORTCUT_INTENT, new Intent(Intent.ACTION_MAIN).setComponent(comp));
/**改成以下方式能夠成功刪除,估計是刪除和建立需要對應才能找到捷徑並成功刪除**/
Intent intent = new Intent();
intent.setClass(activity, activity.getClass());
intent.setAction("android.intent.action.MAIN");
intent.addCategory("android.intent.category.LAUNCHER");
shortcut.putExtra(Intent.EXTRA_SHORTCUT_INTENT,intent);
activity.sendBroadcast(shortcut);
}
/**
* 判斷是否存在捷徑
* */
public boolean hasShortcut(Activity activity,String shortcutName)
{
String url = "";
int systemversion = Integer.parseInt(android.os.Build.VERSION.SDK);
/*大於8的時候在com.android.launcher2.settings 裡查詢(未測試)*/
if(systemversion < 8){
url = "content://com.android.launcher.settings/favorites?notify=true";
}else{
url = "content://com.android.launcher2.settings/favorites?notify=true";
}
ContentResolver resolver = activity.getContentResolver();
Cursor cursor = resolver.query(Uri.parse(url), null, "title=?",new String[] {shortcutName}, null);
if (cursor != null && cursor.moveToFirst()) {
cursor.close();
return true;
}
return false;
}
}

調用測試代碼: 複製代碼 代碼如下: public class mainActivity extends Activity {
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
ShortCutSample sample =new ShortCutSample();
String shortcutName=getString(R.string.app_name);
if(sample.hasShortcut(this, shortcutName))
sample.deleteShortCut(this,shortcutName);
else
sample.creatShortCut(this,shortcutName,R.drawable.icon);
}
}

在網上找了很久都是一樣的代碼,刪除那塊搞了一個下午才弄好,其實很簡單的東東。
第一次發文章,Adnroid新人。多多交流和指導呀。呵呵。

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.