android快捷方式创建和判断的实践方法
来源:互联网 发布:淘宝男装首页文案范文 编辑:程序博客网 时间:2024/03/29 17:36
最近碰到个问题,有一个常用功能之前是在入口页的radiobutton中,但是在多次改版后导致入口被放到发现列表中去了,导致用户进入后要进入入口比之前至少多了很多次的点击,由于项目开发已久,去突击改成插件形式也不现实,所以决定给它来一个快捷方式,在桌面上增加一个快捷入口直接指向该功能;
2、对要使用快捷方式的activity指定唯一识别方法
好了,本文结束,如有疑问可以邮件联系E-MAIL:iamwsbear@gmail.com
我们知道创建快捷方式是通过发送创建快捷方式的广播,然后确定唯一的Activity是通过action加category,然后android的指引都是intent,所以创建广播的代码中必须要有指向该唯一activity的intent,然后发送广播,由系统把这个intent相关信息添加到桌面launcher要读取的用来保存快捷方式的数据表中,(一般是favorite吧,不过有些手机rom很奇怪,本文只针对主流的miui,魅族,纯净android等主流ROM机型)
知道这些后,所以代码可以这样写了:
1、申请权限:
<uses-permission android:name="com.android.launcher.permission.INSTALL_SHORTCUT"/>//添加快捷方式 <uses-permission android:name="com.android.launcher.permission.UNINSTALL_SHORTCUT"/>//删除快捷方式
2、对要使用快捷方式的activity指定唯一识别方法
<activity android:name="com.demo.shortactivity.ShortActivity"> <intent-filter> <action android:name="android.intent.demo.test"/> <category android:name="android.intent.category.thisistest"/> </intent-filter> </activity>
3、发送广播
Intent shortcut = new Intent("com.android.launcher.action.INSTALL_SHORTCUT");Intent shortcutIntent = new Intent();shortcutIntent.setAction("android.intent.demo.test");//对应到activity的actionshortcutIntent.addCategory("android.intent.category.thisistest");//对应到categoryshortcutIntent.setClass(ShortActivity.this, ShortActivity.class);//对应到响应的classshortcut.putExtra(Intent.EXTRA_SHORTCUT_INTENT, shortcutIntent);//放入intentshortcut.putExtra(Intent.EXTRA_SHORTCUT_NAME, "进入创建类");//指定快捷方式名称Intent.ShortcutIconResource iconRes = Intent.ShortcutIconResource.fromContext(this, R.drawable.icon_like_5);//快捷方式图标shortcut.putExtra(Intent.EXTRA_SHORTCUT_ICON_RESOURCE, iconRes);shortcut.putExtra("duplicate", false);//不允许重复创建sendBroadcast(shortcut);Toast.makeText(this, "创建快捷方式成功", Toast.LENGTH_SHORT).show();
就这样快捷方式创建成功了
第二个问题:如果我已经有了快捷方式,然后我需要判断一下是否存在
看了网上各种判断存在方法,想法是对的,就是去找存储快捷方式的表,但是写的太死了,毕竟rom是会被定制的,例如小米的miui,表的位置就不在网上写的那些地址下
所以呢,我们换一个思维,如果我要去读取这个表,我需要一个权限,也可以说就是这个表据要这个权限的用户才可以读,所以跟据这个思维那么我们就可以查找一下整个安装的应用中提供要这个权限才能读的应用信息是什么,然后就知道这个表确切位置是在哪了
代码很简单
private boolean checkHasShortCutBefore() { boolean isInstallShortcut = false; final ContentResolver cr = this.getContentResolver(); String permission = "com.android.launcher.permission.READ_SETTINGS";//拥有读取setting权限的应用 List<PackageInfo> packs = this.getPackageManager().getInstalledPackages(PackageManager.GET_PROVIDERS);//找出所有已安装并提供服务的包信息 if (packs == null) { return false; } String tempAuthority = null; for (PackageInfo pack : packs) { ProviderInfo[] providers = pack.providers; if (providers != null) { for (ProviderInfo provider : providers) {//遍历提供 if (permission.equals(provider.readPermission) || permission.equals(provider.writePermission)) { //如果该提供者的读或者写权限跟我们申请的权限相同,则确定了位置 tempAuthority = provider.authority; } } } } final String AUTHORITY = tempAuthority == null ? "com.android.launcher.settings" : tempAuthority;//默认在这个地址com.android.launcher.settings final Uri CONTENT_URI = Uri.parse("content://" + AUTHORITY + "/favorites?notify=true");//组装表的uri try {//加异常捕获是因为有些表名居然不叫favorites,这种很纠结 Cursor c = cr.query(CONTENT_URI, new String[]{"title", "iconResource"}, "title=?", new String[]{"进入创建类"}, null);//注意名字是跟我上面创建的名称一致 if (c != null && c.getCount() > 0) { isInstallShortcut = true; c.close(); } }catch (Exception e){ } return isInstallShortcut; }
好了,本文结束,如有疑问可以邮件联系E-MAIL:iamwsbear@gmail.com
如果你验证了觉得好用,欢迎点赞
如需转载,必须带上本人邮件地址,否则视为侵权
0 0
- android快捷方式创建和判断的实践方法
- android判断快捷方式是否已经创建的方法
- android创建快捷方式和判断是否已创建快捷方式
- Android 判断、创建和删除快捷方式
- Android 判断、创建和删除快捷方式
- Android 创建和删除快捷方式以及判断是否有快捷方式
- Android 创建和删除快捷方式以及判断是否有快捷方式
- android--创建快捷方式和判断是否已经创建
- Android创建快捷方式和判断是否已经创建
- Android创建快捷方式和判断是否已经创建
- android--创建快捷方式和判断是否已经创建
- Android 创建,删除,判断快捷方式
- Android创建桌面快捷方式的方法
- Android创建快捷方式方法的封装
- android判断和创建快捷方式(4.03测试通过)
- ANDROID 桌面快捷方式创建,和判断 返回false问题
- Android 关于快捷方式的总结(创建、删除、判断是否存在和跳转)
- 总结:android 创建快捷方式的两种方式+判断是否已经创建+删除快捷方式
- 解决git上down到elipse上有时不能运行
- Fast detection of multiple objects in traffic scenes with a common detection framework
- textview实现跑马灯效果
- js类型的判定
- A - How far away ?
- android快捷方式创建和判断的实践方法
- linux下出现ping:unknown host www.baidu.com问题时的解决办法——ubuntu下局域网络的配置
- C#几种异步编程
- app多少钱,开发一款app到底多少钱合适,开发一款APP应用大概需要多少钱
- 从头认识java-12.2 Class对象(1)-简介
- java js sql 中的replace函数
- android(9)(使用pull解析xml文件)
- 20151204正则第六部分(awk小扩展)
- 功能这么齐全的图片压缩类,还有谁?