欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  移动技术

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

程序员文章站 2023-11-30 23:22:52
测试环境为adnroid 2.1以上。 第一步:androidmanifest.xml 权限配置: 添加快捷方式权限: 复制代码 代码如下:
测试环境为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新人。多多交流和指导呀。呵呵。