android shortcut 快捷键 相关问题记录.docx
- 文档编号:3430656
- 上传时间:2022-11-23
- 格式:DOCX
- 页数:4
- 大小:16.52KB
android shortcut 快捷键 相关问题记录.docx
《android shortcut 快捷键 相关问题记录.docx》由会员分享,可在线阅读,更多相关《android shortcut 快捷键 相关问题记录.docx(4页珍藏版)》请在冰豆网上搜索。
androidshortcut快捷键相关问题记录
androidshortcut快捷键相关问题记录
快捷键的生成、删除、判断那些方法原生的系统一般木有问题第三方rom就会存在适配问题
一、权限:
1、manifest文件中添加权限
[html]viewplaincopy<uses-permissionandroid:
name="com.android.launcher.permission.INSTALL_SHORTCUT"/><uses-permissionandroid:
name="com.android.launcher.permission.UNINSTALL_SHORTCUT"/>[html]viewplaincopy</pre>下面就是关于这个权限<p></p><p></p><prename="code"class="html">com.android.launcher.permission.READ_SETTINGS
不同版本不同的机型添加的不同
Build.VERSION.SDK_INT<8:
[html]viewplaincopycom.android.launcher.permission.READ_SETTINGS
Build.VERSION.SDK_INT<19:
[html]viewplaincopycom.android.launcher2.permission.READ_SETTINGSBuild.VERSION.SDK_INT>=19:
[html]viewplaincopycom.android.launcher3.permission.READ_SETTINGS以华为为例就需要添加
[html]viewplaincopyuses-permissionandroid:
name="com.huawei.android.launcher.permission.READ_SETTINGS"/><uses-permissionandroid:
name="com.huawei.android.launcher.permission.WRITE_SETTINGS"/>否则在下面的判断的方法里会报错出现
[html]viewplaincopyjava.lang.SecurityException:
PermissionDenial:
openingprovidercom.huawei.android.launcher.LauncherProviderfromProcessRecord(pid=17220,uid=10150)requirescom.huawei.android.launcher.permission.READ_SETTINGSorcom.huawei.android.launcher.permission.WRITE_SETTINGS
这里列出大部分的平牌机对应的相应权限
[html]viewplaincopy<uses-permissionandroid:
name="com.android.launcher.permission.INSTALL_SHORTCUT"/><uses-permissionandroid:
name="com.android.launcher.permission.UNINSTALL_SHORTCUT"/><uses-permissionandroid:
name="com.android.launcher2.permission.READ_SETTINGS"/><uses-permissionandroid:
name="com.android.launcher2.permission.WRITE_SETTINGS"/><uses-permissionandroid:
name="com.android.launcher3.permission.READ_SETTINGS"/><uses-permissionandroid:
name="com.android.launcher3.permission.WRITE_SETTINGS"/><uses-permissionandroid:
name="org.adw.launcher.permission.READ_SETTINGS"/><uses-permissionandroid:
name="org.adw.launcher.permission.WRITE_SETTINGS"/><uses-permissionandroid:
name="com.htc.launcher.permission.READ_SETTINGS"/><uses-permissionandroid:
name="com.htc.launcher.permission.WRITE_SETTINGS"/><uses-permissionandroid:
name="com.qihoo360.launcher.permission.READ_SETTINGS"/><uses-permissionandroid:
name="com.qihoo360.launcher.permission.WRITE_SETTINGS"/><uses-permissionandroid:
name="com.lge.launcher.permission.READ_SETTINGS"/><uses-permissionandroid:
name="com.lge.launcher.permission.WRITE_SETTINGS"/><uses-permissionandroid:
name="net.qihoo.launcher.permission.READ_SETTINGS"/><uses-permissionandroid:
name="net.qihoo.launcher.permission.WRITE_SETTINGS"/><uses-permissionandroid:
name="org.adwfreak.launcher.permission.READ_SETTINGS"/><uses-permissionandroid:
name="org.adwfreak.launcher.permission.WRITE_SETTINGS"/><uses-permissionandroid:
name="org.adw.launcher_donut.permission.READ_SETTINGS"/><uses-permissionandroid:
name="org.adw.launcher_donut.permission.WRITE_SETTINGS"/><uses-permissionandroid:
name="com.huawei.launcher3.permission.READ_SETTINGS"/><uses-permissionandroid:
name="com.huawei.launcher3.permission.WRITE_SETTINGS"/><uses-permissionandroid:
name="com.fede.launcher.permission.READ_SETTINGS"/><uses-permissionandroid:
name="com.fede.launcher.permission.WRITE_SETTINGS"/><uses-permissionandroid:
name="com.sec.android.app.twlauncher.settings.READ_SETTINGS"/><uses-permissionandroid:
name="com.sec.android.app.twlauncher.settings.WRITE_SETTINGS"/><uses-permissionandroid:
name="com.anddoes.launcher.permission.READ_SETTINGS"/><uses-permissionandroid:
name="com.anddoes.launcher.permission.WRITE_SETTINGS"/><uses-permissionandroid:
name="com.tencent.qqlauncher.permission.READ_SETTINGS"/><uses-permissionandroid:
name="com.tencent.qqlauncher.permission.WRITE_SETTINGS"/><uses-permissionandroid:
name="com.huawei.launcher2.permission.READ_SETTINGS"/><uses-permissionandroid:
name="com.huawei.launcher2.permission.WRITE_SETTINGS"/><uses-permissionandroid:
name="com.android.mylauncher.permission.READ_SETTINGS"/><uses-permissionandroid:
name="com.android.mylauncher.permission.WRITE_SETTINGS"/><uses-permissionandroid:
name="com.ebproductions.android.launcher.permission.READ_SETTINGS"/><uses-permissionandroid:
name="com.ebproductions.android.launcher.permission.WRITE_SETTINGS"/><uses-permissionandroid:
name="com.oppo.launcher.permission.READ_SETTINGS"/><uses-permissionandroid:
name="com.oppo.launcher.permission.WRITE_SETTINGS"/><uses-permissionandroid:
name="com.lenovo.launcher.permission.READ_SETTINGS"/><uses-permissionandroid:
name="com.lenovo.launcher.permission.WRITE_SETTINGS"/><uses-permissionandroid:
name="com.huawei.android.launcher.permission.READ_SETTINGS"/><uses-permissionandroid:
name="com.huawei.android.launcher.permission.WRITE_SETTINGS"/><uses-permissionandroid:
name="telecom.mdesk.permission.READ_SETTINGS"/><uses-permissionandroid:
name="telecom.mdesk.permission.WRITE_SETTINGS"/><uses-permissionandroid:
name="dianxin.permission.ACCESS_LAUNCHER_DATA"/>二、provider.authority为null的问题
[html]viewplaincopypublicbooleanhasShortcut(Contextcontext,StringshortCutName){booleanhas=false;finalContentResolvercr=context.getContentResolver();StringAUTHORITY=getAuthorityFromPermission(context,"com.android.launcher.permission.READ_SETTINGS");finalUriCONTENT_URI=Uri.parse("content:
//"+AUTHORITY+"/favorites?
notify=true");//确认contentProvider中是否有快捷键信息Cursorc=cr.query(CONTENT_URI,newString[]{"title","iconResource"},"title=?
",newString[]{shortCutName.trim()},null);if(c!
=null&&c.getCount()>0){has=true;if(c!
=null&&!
c.isClosed()){c.close();}}returnhas;}[html]viewplaincopyprivateStringgetAuthorityFromPermission(Contextcontext,Stringpermission){if(permission==null)returnnull;List<PackageInfo>packs=context.getPackageManager().getInstalledPackages(PackageManager.GET_PROVIDERS);if(packs!
=null){for(PackageInfopack:
packs){ProviderInfo[]providers=pack.providers;if(providers!
=null){for(ProviderInfoprovider:
providers){if(permission.equals(provider.readPermission))returnprovider.authority;if(permission.equals(provider.writePermission))returnprovider.authority;}}}}returnnull;}
通常写法应该是这样或者再加入这些代码:
[html]viewplaincopyif(TextUtils.isEmpty(AUTHORITY)){intsdkInt=Build.VERSION.SDK_INT;if(sdkInt<8){//Android2.1.x(API7)以及以下的AUTHORITY="com.android.launcher.settings";}elseif(sdkInt<19){//Android4.4以下AUTHORITY="com.android.launcher2.settings";}else{//4.4以及以上AUTHORITY="com.android.launcher3.settings";}}
但对第三方rom来说好像还是行不通权限值虽然取到了这样得到的uri对应的cursor依然为空看来权限并没有获取正确。
通过对provideInfo的遍历我发现后缀字符串为"launcher.permission.READ_SETTINGS"日志过滤出的权限只有一个并且正是我想要的。
以下是我对获取权限方法的些许改动
[html]viewplaincopyprivateStringgetAuthorityFromPermission(Contextcontext){List<PackageInfo>packs=context.getPackageManager().getInstalledPackages(PackageManager.GET_PROVIDERS);if(packs!
=null){for(PackageInfopack:
packs){ProviderInfo[]providers=pack.providers;if(providers!
=null){for(ProviderInfoprovider:
providers){//"launcher.permission.READ_SETTINGS"规律总结不见得适配所有需要测试if(!
TextUtils.isEmpty(provider.readPermission)&&provider.readPermission.contains("launcher.permission.READ_SETTINGS")){returnprovider.authority;}}}}}returnnull;}
三、创建快捷方式点击进入相应的程序或界面
[html]viewplaincopypublicvoidaddShortCut(ContextmContext){Intentshortcut=newIntent("com.android.launcher.action.INSTALL_SHORTCUT");shortcut.putExtra("duplicate",false);shortcut.putExtra(Intent.EXTRA_SHORTCUT_NAME,mContext.getResources().getString(R.string.str_shortCutName));ParcelableshortcutIcon=Intent.ShortcutIconResource.fromContext(mContext,R.drawable.icon_shortcut);shortcut.putExtra(Intent.EXTRA_SHORTCUT_ICON_RESOURCE,shortcutIcon);Intentintent=newIntent();//ComponentNamecomp=newComponentName(mContext.getPackageName(),//mContext.getPackageName()+".ui.xx."//+IntentTargetClass.class.getSimpleName());intent.setAction(Intent.ACTION_MAIN);intent.addCategory(Intent.CATEGORY_LAUNCHER);intent.setClass(mContext,IntentTargetClass.class);//intent.setComponent(comp);shortcut.putExtra(Intent.EXTRA_SHORTCUT_INTENT,intent);mContext.sendBroadcast(shortcut);}
通常都没有问题但个别版本个别第三方又会出现虽然出现了创建xxx快捷方式的提醒但是手机桌面并没有快捷图标的出现
这个时候我把不重复创建的设置置为true是否已有创建需要根据快捷方式是否已经存在进行判断
[html]viewplaincopyshortcut.putExtra("duplicate",true);另外有的快捷方式虽已出现但是点击快捷方式并没有进入我们想要进入的界面activity
在该activity的声明里加入intent_filter
[html]viewplaincopy<intent-filter><actionandroid:
name="android.intent.action.CREATE_SHORTCUT"/></intent-filter>大部分情况下都是ok了但时仍有个别快捷方式图标显示正确但是名称并没有显示出我们赋予的shortcutName而是显示app_name例如LG部分机型
这个问题没有解决希望有大神能帮助解答本文属于只知其一不知其二的尝试解决方式很希望那些看Launcher模块源码的大神们能分享指点一二
如有错误欢迎指正
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- android shortcut 快捷键 相关问题记录 相关 问题 记录