android快捷方式创建和判断的实践方法

来源:互联网 发布:淘宝男装首页文案范文 编辑:程序博客网 时间:2024/03/29 17:36
最近碰到个问题,有一个常用功能之前是在入口页的radiobutton中,但是在多次改版后导致入口被放到发现列表中去了,导致用户进入后要进入入口比之前至少多了很多次的点击,由于项目开发已久,去突击改成插件形式也不现实,所以决定给它来一个快捷方式,在桌面上增加一个快捷入口直接指向该功能;


我们知道创建快捷方式是通过发送创建快捷方式的广播,然后确定唯一的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
原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 金毛幼犬不吃狗粮怎么办 4孩子受凉了呕吐怎么办 尿多是什么原因造成的怎么办 5岁宝宝老尿床怎么办 五岁了还尿床怎么办 2岁宝宝晚上尿床怎么办 胃疼腹泻稀水怎么办 网购成瘾怎么办 知乎 军人被警察打了怎么办 对高院再审不服怎么办 对高院判决不服怎么办 白色砂锅烧黑了怎么办 手机被偷关机了怎么办 狗被眼镜蛇咬了怎么办 穿高跟鞋脚趾头长茧怎么办 穿皮鞋脚底板疼怎么办 鞋子穿了脚趾痛怎么办 脚被鞋子磨肿了怎么办 脚趾磨出茧子怎么办疼 脚掌长茧走路疼怎么办 脚底磨出茧子疼怎么办 手指上写字有茧怎么办 写字磨的茧子疼怎么办 脚上的大脚骨疼怎么办 脸特别烫 又红怎么办 6岁宝宝发音不准怎么办 3岁宝宝发音不准怎么办 5岁宝宝发音不准怎么办 4岁宝宝发音不准怎么办 被螃蟹夹出血了怎么办 苹果6主板坏了怎么办 键盘掉了一个键怎么办 汽车屏幕砸坏了怎么办 电视的屏幕坏了怎么办 高三孩子早恋该怎么办 高一早恋家长该怎么办 高二早恋家长该怎么办 200斤新娘抱不动怎么办 160斤新娘抱不动怎么办 科目二挂了5次怎么办 纹身纹完了肿了怎么办