zl程序教程

您现在的位置是:首页 >  移动开发

当前栏目

Android创建/验证/删除桌面快捷方式(已测试可用)

Android 删除 创建 验证 桌面 快捷方式
2023-06-13 09:14:45 时间
测试环境为Adnroid2.1以上。
第一步:AndroidManifest.xml权限配置:
添加快捷方式权限:
复制代码代码如下:

<uses-permissionandroid:name="com.android.launcher.permission.INSTALL_SHORTCUT"/>

验证快捷方式是否存在权限:
复制代码代码如下:

<uses-permissionandroid:name="com.android.launcher.permission.READ_SETTINGS"/>

删除快捷方式权限: 
复制代码代码如下:
<uses-permissionandroid:name="com.android.launcher.permission.UNINSTALL_SHORTCUT"/>

代码:
复制代码代码如下:
publicclassShortCutSample{
/**
*添加快捷方式
**/
publicvoidcreatShortCut(Activityactivity,StringshortcutName,intresourceId)
{
Intentintent=newIntent();
intent.setClass(activity,activity.getClass());
/*以下两句是为了在卸载应用的时候同时删除桌面快捷方式*/
intent.setAction("android.intent.action.MAIN");
intent.addCategory("android.intent.category.LAUNCHER");
Intentshortcutintent=newIntent("com.android.launcher.action.INSTALL_SHORTCUT");
//不允许重复创建
shortcutintent.putExtra("duplicate",false);
//需要现实的名称
shortcutintent.putExtra(Intent.EXTRA_SHORTCUT_NAME,shortcutName);
//快捷图片
Parcelableicon=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);
}
/**
*删除快捷方式
**/
publicvoiddeleteShortCut(Activityactivity,StringshortcutName)
{
Intentshortcut=newIntent("com.android.launcher.action.UNINSTALL_SHORTCUT");
//快捷方式的名称
shortcut.putExtra(Intent.EXTRA_SHORTCUT_NAME,shortcutName);
//在网上看到到的基本都是一下几句,测试的时候发现并不能删除快捷方式。
//StringappClass=activity.getPackageName()+"."+activity.getLocalClassName();
//ComponentNamecomp=newComponentName(activity.getPackageName(),appClass);
//shortcut.putExtra(Intent.EXTRA_SHORTCUT_INTENT,newIntent(Intent.ACTION_MAIN).setComponent(comp));
/**改成以下方式能够成功删除,估计是删除和创建需要对应才能找到快捷方式并成功删除**/
Intentintent=newIntent();
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);
}
/**
*判断是否存在快捷方式
**/
publicbooleanhasShortcut(Activityactivity,StringshortcutName)
{
Stringurl="";
intsystemversion=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";
}
ContentResolverresolver=activity.getContentResolver();
Cursorcursor=resolver.query(Uri.parse(url),null,"title=?",newString[]{shortcutName},null);
if(cursor!=null&&cursor.moveToFirst()){
cursor.close();
returntrue;
}
returnfalse;
}
}

调用测试代码:
复制代码代码如下:
 publicclassmainActivityextendsActivity{
/**Calledwhentheactivityisfirstcreated.*/
@Override
publicvoidonCreate(BundlesavedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
ShortCutSamplesample=newShortCutSample();
StringshortcutName=getString(R.string.app_name);
if(sample.hasShortcut(this,shortcutName))
sample.deleteShortCut(this,shortcutName);
else
sample.creatShortCut(this,shortcutName,R.drawable.icon);
}
}

在网上找了很久都是一样的代码,删除那块搞了一个下午才弄好,其实很简单的东东。
第一次发文章,Adnroid新人。多多交流和指导呀。呵呵。