Android创建/验证/删除桌面快捷方式(已测试可用)
Android 删除 创建 验证 桌面 快捷方式
2023-06-13 09:14:45 时间
测试环境为Adnroid2.1以上。
第一步:AndroidManifest.xml权限配置:
添加快捷方式权限:
复制代码代码如下:
第一步: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新人。多多交流和指导呀。呵呵。
相关文章
- mac 电脑android环境变量设置,mac上Android环境变量配置[通俗易懂]
- android declare-styleable 和style,Android 关于declare-styleable属性的写法….
- android sdk安装过程,图文详解Android 3.0 SDK安装教程
- android短信验证码方案,Android之短信验证码
- android短信验证码方案,Android开发之属于你的短信验证码(一)
- android短信验证码代码,Android短信验证码自动填写实现代码
- android读取sqlite数据库的数据并用listview显示
- [电池]Android 9.0 电池未充电与充电字符串提示信息[通俗易懂]
- Android resource linking failed_android sdk location should not
- 【Android 内存优化】垃圾回收算法 ( 内存优化总结 | 常见的内存泄漏场景 | GC 算法 | 标记清除算法 | 复制算法 | 标记压缩算法 )
- 【Android 组件化】使用 ARoute 实现组件化 ( ARoute 初始化 及 界面跳转 源码分析 )
- 【Android 事件分发】ItemTouchHelper 实现侧滑删除
- 【Android 逆向】修改 Android 系统文件 ( Android 逆向中需要经常修改的文件和目录 | 在 root 后的设备中获取 / 目录的 rw 权限后注意事项 )
- 【Android 逆向】函数拦截实例 ( ③ 刷新 CPU 高速缓存 | ④ 处理拦截函数 | ⑤ 返回特定结果 )
- 【Android Gradle 插件】build.gradle 中的 android 配置 ( 配置项 | compileSdkVersion 配置 | buildToolsVersion 配置 )
- 【ijkplayer】编译 Android 版本的 ijkplayer ⑤ ( 执行 init-android-libyuv.sh | 执行 init-android-soundtouch.sh )
- 【Android Gradle 插件】Gradle 基础配置 ② ( Gradle 空白项目构建示例演示 )
- 使用Android新式LruCache缓存图片,基于线程池异步加载图片详解编程语言