豪仕知识网--知识就是力量!

微信
手机版
生活常识

安卓系统中的几种创建快捷方式的方法/安卓创建快捷图标

作者 :耶律楚材 2024-01-07 09:08:20 围观 : 评论

安卓系统中的几种创建快捷方式的方法/安卓创建快捷图标

豪士君测试所用平台

◐◐◐◐●☛█▼▲豪仕知识网HT●☛█▼▲◐◐◐◐●☛█▼▲

现在还有好多人不知道安卓系统中的几种创建快捷方式的方法,接下来我们小编就来分享一下。

使用Android的知道,有快捷方式这么一说,可以通过长按桌面来添加,也有的是第一次运行时候询问是否需要安装,有的直接放在桌面(MIUI是直接放在桌面的),那么为了驱动用户使用,有些应用在安装以后便直接安装了快捷方式,还有些应用是在用户第一次进入的时候,询问用户是否安装快捷方式,那么接下来就看看快捷方式的实现。

HTTP://WWW.haoz.net豪仕知识网采集不好玩哦◐◐◐◐◐◐◐◐◐◐◐◐◐◐◐◐◐◐◐◐◐◐◐◐◐◐◐◐◐◐撒旦法师打发斯蒂芬

安装即带

这个实现方法比较简单,直接在AndroidManifest.xml里面就可申明

12android:name="demoAlias"3android:icon="@drawable/logo"4android:label="demoAliasLabel"5android:targetActivity=".MainActivity">6789101112

HTTP://WWW.haoz.net◐◐◐◐◐◐◐◐◐◐◐◐◐◐◐◐豪仕知识网

name表示快捷方式显示的名字

icon表示快捷方式图标

targetActivity表示点击快捷方式启动的活动

●☛█▼▲豪仕知识网◐◐◐◐●☛█▼▲◐◐◐◐●☛█▼▲

这个表情直接申明在Application中即可,有一点需要说明的是从快捷方式进入和从默认桌面Activity进入,对于Application有一些参数是有差异的,例如

◐◐◐◐●☛█▼▲豪仕知识网███████豪仕知识http://www.Haoz.net▼▲▼▲▼▲▼▲▼●●●●●●●▼▲▼▲▼▲

getIntent().getComponent().getClassName()

◐◐◐◐●☛█▼▲豪仕知识网███████豪仕知识网HTtp://www.haoZ.net▼▲▼▲▼▲▼▲▼●●●●●●●▼▲▼▲▼▲

主APP进入:{package}.MainActivity

快捷方式进入:{package}.demoAlias

注意:这种本质上不属于快捷方式,只是在Launcher中添加了一个APP入口的副本,重点在下面的动态创建。

◐◐◐◐●☛█▼▲◐◐◐◐●☛█▼▲HtTp://wWW.haoz.net豪仕知识网●●●●●●●●●●●●●●●●●●●●●●●●●●

动态创建

方式1:托管给系统桌面的快捷方式来创建

◐◐◐◐●☛█▼▲豪仕知识网███████豪仕知识网HTtp://www.haoZ.net▼▲▼▲▼▲▼▲▼●●●●●●●▼▲▼▲▼▲

对于Android原生系统,桌面空白处长按可以添加小控件、快捷方式等。点击快捷方式,里面会呈现申明了快捷方式的APP快捷方式列表。

那么如何申明快捷方式呢?这就是第一步

◐◐◐◐●☛█▼▲◐◐◐◐●☛█▼▲◐◐◐◐●☛█▼▲HTTP://WWW.hAoz.net███████████████████████████东方金报网

第一步:申明快捷方式

1

2android:name="DemoShortCutName"3android:icon="@drawable/logo"4android:label="DemoShortCutLabel"5android:targetActivity=".DynamicShortcut">6789

◐◐◐◐●☛█▼▲豪仕知识网HT●☛█▼▲◐◐◐◐●☛█▼▲

快捷方式也是一个Activity,可以看成一个虚拟的Activity不需要实体的承载

name:表示这个Activity的标示,通过getClassName()会获取name属性

豪仕知识网http://www.haoz.net▼▲▼▲▼▲▼▲▼●●●●●●●▼▲▼▲▼▲

icon:在桌面快捷方式列表中的图标

HTTP://WWW.haoz.net豪仕知识网采集不好玩哦◐◐◐◐◐◐◐◐◐◐◐◐◐◐◐◐◐◐◐◐◐◐◐◐◐◐◐◐◐◐撒旦法师打发斯蒂芬

label:在桌面快捷方式列表中的文字

◐◐◐◐●☛█▼▲◐◐◐◐●☛█▼▲◐◐◐◐●☛█▼▲HTTP://WWW.hAoz.net███████████████████████████东方金报网

targetActivity:既然说他是一个虚拟的Activity,那么需要制定一个实体,也即快捷方式的启动

通过申明android.intent.action.CREATE_SHORTCUT申明,让这个虚拟的Activity加入到桌面快捷方式列表中。

◐◐◐◐●☛█▼▲豪仕知识网███████豪仕知识http://www.Haoz.net▼▲▼▲▼▲▼▲▼●●●●●●●▼▲▼▲▼▲

如果在桌面快捷方式列表中点击这个快捷方式,会发现仅仅是启动了TargetActivity,在桌面上并没有看到这个快捷方式被添加,那么接下来需要在TargetActivity中去实现这个。

第二步:实现快捷方式的添加

◐◐◐◐●☛█▼▲◐◐◐◐●☛█▼▲◐◐◐◐●☛█▼▲HTTP://WWW.hAoz.net███████████████████████████东方金报网

1privatevoidgenerateShortcut(){

2//快捷方式要启动的Activity3IntentshortcutIntent=newIntent();4shortcutIntent.setClassName(this,this.getClass().getName());56//动态生成快捷方式7Intentintent=newIntent();8intent.putExtra(Intent.EXTRA_SHORTCUT_INTENT,shortcutIntent);9intent.putExtra(Intent.EXTRA_SHORTCUT_NAME,"test");10ParcelableiconResource=Intent.ShortcutIconResource.fromContext(this,R.drawable.icon0);11intent.putExtra(Intent.EXTRA_SHORTCUT_ICON_RESOURCE,iconResource);12//将生成的快捷方式递交给系统生成桌面快捷方式13setResult(RESULT_OK,intent);14}

快捷方式的添加方法和在AndroidManifest中申明远离基本相同。

●☛█▼▲豪仕知识网◐◐◐◐●☛█▼▲◐◐◐◐●☛█▼▲

添加原理知道了,那么在什么时候去触发添加动作

◐◐◐◐●☛█▼▲豪仕知识网http://www.haOz.net▼▲▼▲▼▲▼▲▼●●●●●●●▼▲▼▲▼▲

第三步:结合快捷方式列表中点击生成快捷方式

TargetActivity可以是单独为创建快捷方式功能而存在,也可以是应用程序的启动页面。那么来看下在启动页作为TargetActivity的时候,该如何触发添加快捷方式,

代码实现原理是:

◐◐◐◐●☛█▼▲◐◐◐◐●☛█▼▲◐◐◐◐●☛█▼▲HTTP://WWW.hAoz.net███████████████████████████东方金报网

1.点击桌面快捷方式

2.启动TargetActivity

HTTP://WWW.haoz.net豪仕知识网采集不好玩哦◐◐◐◐◐◐◐◐◐◐◐◐◐◐◐◐◐◐◐◐◐◐◐◐◐◐◐◐◐◐撒旦法师打发斯蒂芬

3.添加快捷方式到桌面。

期望结果是没有第二步,点击直接添加到桌面,那么在实现的时候,就可以做下处理:

豪仕知识网http://www.haoz.net▼▲▼▲▼▲▼▲▼●●●●●●●▼▲▼▲▼▲

1@Override

2protectedvoidonCreate(BundlesavedInstanceState){3super.onCreate(savedInstanceState);4setContentView(R.layout.dynamic_shortcut);56finalStringintentAction=getIntent().getAction();7if(Intent.ACTION_CREATE_SHORTCUT.equals(intentAction)){8generateShortcut();9finish();10return;11}12}

这样的话,就达到了期望的结果,到此为止,快捷方式就添加完毕,如果想做成类似“金山开关,360快捷开关”这样的,可以专门做个Dialog样式的Activity来作为TargetActivity。

●☛█▼▲豪仕知识网◐◐◐◐●☛█▼▲◐◐◐◐●☛█▼▲

方式2:通过代码在任意时刻通过任意方式创建

例如通过点击应用里面的某个Button或者应用程序第一次启动,或者。。。,这里看下原理

◐◐◐◐●☛█▼▲豪仕知识网███████豪仕知识网HTtp://www.haoZ.net▼▲▼▲▼▲▼▲▼●●●●●●●▼▲▼▲▼▲

1privatevoidcreateShortcut(){

◐◐◐◐●☛█▼▲豪仕知识网http://www.haOz.net▼▲▼▲▼▲▼▲▼●●●●●●●▼▲▼▲▼▲

2//快捷方式要启动的Activity3Intenttarget=newIntent();4target.setClassName(this,this.getClass().getName());56//动态生成快捷方式7IntentshortcutIntent=newIntent("com.android.launcher.action.INSTALL_SHORTCUT");8shortcutIntent.putExtra(Intent.EXTRA_SHORTCUT_NAME,"shortcutName");9shortcutIntent.putExtra(Intent.EXTRA_SHORTCUT_ICON_RESOURCE,Intent.ShortcutIconResource.fromContext(this,R.drawable.icon1));10shortcutIntent.putExtra("duplicate",false);11shortcutIntent.putExtra(Intent.EXTRA_SHORTCUT_INTENT,target);1213//利用receiver通知系统创建快捷方式14sendBroadcast(shortcutIntent);1516}

可以看到,和第一种方式实现基本一样,只不过通知系统生成的方式不一样,此处用的是通知。其实第一种方式也可以利用通知来实现。

添加“duplicate”是表示快捷方式不能重复添加,当然这块和第一种实现方式重复添加不冲突。

●☛█▼▲豪仕知识网◐◐◐◐●☛█▼▲◐◐◐◐●☛█▼▲

那么到这里,第二种方式核心实现完成。

◐◐◐◐●☛█▼▲◐◐◐◐●☛█▼▲◐◐◐◐●☛█▼▲豪仕知识网HtTp://▲▼▲▼▲

扩展

http://www.haoz.net●☛█▼▲◐●☛█▼▲◐◐◐◐●☛█▼▲◐豪仕知识网●☛█▼▲豪仕知识网

上述仅仅介绍了核心实现,那么对于快捷方式的添加,当然还需要申明创建快捷方式的权限了:

◐◐◐◐●☛█▼▲◐◐◐◐●☛█▼▲◐◐◐◐●☛█▼▲HTTP://WWW.hAoz.net███████████████████████████东方金报网

1

这个当然不能忘掉。

还有对于MIUI这种神奇的rom是没有快捷方式这一说的,大家测试的时候,多用些不同的rom机器试试。

◐◐◐◐●☛█▼▲豪仕知识网███████http://www.haOZ.net▼▲▼▲▼▲▼▲▼●●●●●●●▼▲▼▲▼▲

那么既然可以重复创建快捷方式,如果想限制只能有一个快捷方式存在,怎么办,上面设置“duplicate”属性只能限制第二种方式通知添加,而且会有提示,且是系统去判断的,那么我们怎么能自己判断是否已经存在快捷方式了呢,当然可以,来一次看看。

http://www.haoz.net●☛█▼▲◐●☛█▼▲◐◐◐◐●☛█▼▲◐豪仕知识网●☛█▼▲豪仕知识网

实现思路可以这么想:快捷方式在桌面,那么如果能获取系统桌面的应用程序属性,判断是否我的应用在被放到了桌面就行。

那么来看下代码:

◐◐◐◐●☛█▼▲豪仕知识网http://www.haOz.net▼▲▼▲▼▲▼▲▼●●●●●●●▼▲▼▲▼▲

1privatebooleanhasShortcut(){

豪仕知识网http://www.haoz.net▼▲▼▲▼▲▼▲▼●●●●●●●▼▲▼▲▼▲

2finalStringAUTHORITY="com.android.launcher.settings";3finalUriCONTENT_URI=Uri.parse("content://"+AUTHORITY+"/favorites?notify=true");4Cursorc=getContentResolver().query(5CONTENT_URI,6newString[]{"title"},7"title=?",8newString[]{"test"},9null);10if(c!=null&&c.moveToNext()){11returntrue;12}13returnfalse;14}

简单的说明下:

通过Context的getContentResolve获取系统的共享数据,在共享数据中,查找指定Uri的数据,也即launcher中的favorite表,也即快捷方式表。

◐◐◐◐●☛█▼▲豪仕知识网███████豪仕知识网HTtp://www.haoZ.net▼▲▼▲▼▲▼▲▼●●●●●●●▼▲▼▲▼▲

然后query的参数是筛选表的title列,并且title=“test”的行数据,如果查询有结果,表示快捷方式名为test的存在,也即返回快捷方式已经添加到桌面。

◐◐◐◐●☛█▼▲◐◐◐◐●☛█▼▲◐◐◐◐●☛█▼▲HTTP://WWW.hAoz.net███████████████████████████东方金报网

那么如果你时间了,如果你的测试机是MIUI,或者HTC等rom,你会发现c为null,怎么回事,解释下

android系统桌面的基本信息由一个launcher.db的Sqlite数据库管理,里面有三张表,其中一张表就是favorites。这个db文件一般放在data/data/com.android.launcher(launcher2)文件的databases下。但是对于不同的rom会放在不同的地方,例如MIUI放在data/data/com.miui.home/databases下面,htc放在data/data/com.htc.launcher/databases下面,那么如何用程序来找到这个认证标示呢

◐◐◐◐●☛█▼▲豪仕知识网███████豪仕知识网HTtp://www.haoZ.net▼▲▼▲▼▲▼▲▼●●●●●●●▼▲▼▲▼▲

1privateStringgetAuthorityFromPermission(Contextcontext,Stringpermission){

◐◐◐◐●☛█▼▲◐◐◐◐●☛█▼▲◐◐◐◐●☛█▼▲HTTP://WWW.hAoz.net███████████████████████████东方金报网

2if(TextUtils.isEmpty(permission)){3returnnull;4}5Listpacks=context.getPackageManager().getInstalledPackages(PackageManager.GET_PROVIDERS);6if(packs==null){7returnnull;8}9for(PackageInfopack:packs){10ProviderInfo[]providers=pack.providers;11if(providers!=null){12for(ProviderInfoprovider:providers){13if(permission.equals(provider.readPermission)||permission.equals(provider.writePermission)){14returnprovider.authority;15}16}17}18}19returnnull;20}

通过Permission来找到这个Authority,那么修改验证方法:

1privatebooleanhasShortcut(){

HTTP://WWW.haoz.net豪仕知识网采集不好玩哦◐◐◐◐◐◐◐◐◐◐◐◐◐◐◐◐◐◐◐◐◐◐◐◐◐◐◐◐◐◐撒旦法师打发斯蒂芬

2finalStringAUTHORITY=getAuthorityFromPermission(getApplicationContext(),"com.android.launcher.permission.READ_SETTINGS");3finalUriCONTENT_URI=Uri.parse("content://"+AUTHORITY+"/favorites?notify=true");4Cursorc=getContentResolver().query(5CONTENT_URI,6newString[]{"title"},7"title=?",8newString[]{"test"},9null);10if(c!=null&&c.moveToNext()){11returntrue;12}13returnfalse;14}

http://www.haoz.net●☛█▼▲◐●☛█▼▲◐◐◐◐●☛█▼▲◐豪仕知识网●☛█▼▲豪仕知识网

这样就可以了,对于某些系统,找不到的话,可能是由于权限原因或者是系统文件顺坏等,你可以通过es explorer工具去找下该文件,并试着用DDMS去读取

DDMS读取文件的时候,我出现了权限问题,参考了/d/file/2024/01/07/61204.html ◐◐◐◐●☛█▼▲◐◐◐◐●☛█▼▲◐◐◐◐●☛█▼▲豪仕知识网HtTp://▲▼▲▼▲

总结

OK,快捷方式通过一天的搜索,试验,找问题,找机器试,总结完毕,把网上出现的一些问题和解决方案都对应的总结了下,希望对大家有帮组。

使用Android的知道,有快捷方式这么一说,可以通过长按桌面来添加,也有的是第一次运行时候询问是否需要安装,有的直接放在桌面(MIUI是直接放在桌面的),那么为了驱动用户使用,有些应用在安装以后便直接安装了快捷方式,还有些应用是在用户第一次进入的时候,询问用户是否安装快捷方式,那么接下来就看看快捷方式的实现。

HTTP://WWW.haoz.net豪仕知识网采集不好玩哦◐◐◐◐◐◐◐◐◐◐◐◐◐◐◐◐◐◐◐◐◐◐◐◐◐◐◐◐◐◐撒旦法师打发斯蒂芬

安装即带

这个实现方法比较简单,直接在AndroidManifest.xml里面就可申明

豪仕知识网http://www.haoz.net▼▲▼▲▼▲▼▲▼●●●●●●●▼▲▼▲▼▲

12android:name="demoAlias"3android:icon="@drawable/logo"4android:label="demoAliasLabel"5android:targetActivity=".MainActivity">6789101112

name表示快捷方式显示的名字

icon表示快捷方式图标

◐◐◐◐●☛█▼▲豪仕知识网███████豪仕知识http://www.Haoz.net▼▲▼▲▼▲▼▲▼●●●●●●●▼▲▼▲▼▲

targetActivity表示点击快捷方式启动的活动

这个表情直接申明在Application中即可,有一点需要说明的是从快捷方式进入和从默认桌面Activity进入,对于Application有一些参数是有差异的,例如

http://www.haoz.net●☛█▼▲◐●☛█▼▲◐◐◐◐●☛█▼▲◐豪仕知识网●☛█▼▲豪仕知识网

getIntent().getComponent().getClassName()

主APP进入:{package}.MainActivity

HTTP://WWW.haoz.net豪仕知识网采集不好玩哦◐◐◐◐◐◐◐◐◐◐◐◐◐◐◐◐◐◐◐◐◐◐◐◐◐◐◐◐◐◐撒旦法师打发斯蒂芬

快捷方式进入:{package}.demoAlias

注意:这种本质上不属于快捷方式,只是在Launcher中添加了一个APP入口的副本,重点在下面的动态创建。

动态创建

◐◐◐◐●☛█▼▲◐◐◐◐●☛█▼▲◐◐◐◐●☛█▼▲HTTP://WWW.hAoz.net███████████████████████████东方金报网

方式1:托管给系统桌面的快捷方式来创建

对于Android原生系统,桌面空白处长按可以添加小控件、快捷方式等。点击快捷方式,里面会呈现申明了快捷方式的APP快捷方式列表。

◐◐◐◐●☛█▼▲豪仕知识网███████http://www.haOZ.net▼▲▼▲▼▲▼▲▼●●●●●●●▼▲▼▲▼▲

那么如何申明快捷方式呢?这就是第一步

HTTP://WWW.haoz.net◐◐◐◐◐◐◐◐◐◐◐◐◐◐◐◐豪仕知识网

第一步:申明快捷方式

HTTP://WWW.haoz.net◐◐◐◐◐◐◐◐◐◐◐◐◐◐◐◐豪仕知识网

1

2android:name="DemoShortCutName"3android:icon="@drawable/logo"4android:label="DemoShortCutLabel"5android:targetActivity=".DynamicShortcut">6789

●☛█▼▲豪仕知识网◐◐◐◐●☛█▼▲◐◐◐◐●☛█▼▲

快捷方式也是一个Activity,可以看成一个虚拟的Activity不需要实体的承载

name:表示这个Activity的标示,通过getClassName()会获取name属性

icon:在桌面快捷方式列表中的图标

◐◐◐◐●☛█▼▲豪仕知识网███████豪仕知识http://www.Haoz.net▼▲▼▲▼▲▼▲▼●●●●●●●▼▲▼▲▼▲

label:在桌面快捷方式列表中的文字

HTTP://WWW.haoz.net◐◐◐◐◐◐◐◐◐◐◐◐◐◐◐◐豪仕知识网

targetActivity:既然说他是一个虚拟的Activity,那么需要制定一个实体,也即快捷方式的启动

◐◐◐◐●☛█▼▲◐◐◐◐●☛█▼▲◐◐◐◐●☛█▼▲豪仕知识网HtTp://▲▼▲▼▲

通过申明android.intent.action.CREATE_SHORTCUT申明,让这个虚拟的Activity加入到桌面快捷方式列表中。

◐◐◐◐●☛█▼▲豪仕知识网http://www.haOz.net▼▲▼▲▼▲▼▲▼●●●●●●●▼▲▼▲▼▲

如果在桌面快捷方式列表中点击这个快捷方式,会发现仅仅是启动了TargetActivity,在桌面上并没有看到这个快捷方式被添加,那么接下来需要在TargetActivity中去实现这个。

HTTP://WWW.haoz.net◐◐◐◐◐◐◐◐◐◐◐◐◐◐◐◐豪仕知识网

第二步:实现快捷方式的添加

1privatevoidgenerateShortcut(){

2//快捷方式要启动的Activity3IntentshortcutIntent=newIntent();4shortcutIntent.setClassName(this,this.getClass().getName());56//动态生成快捷方式7Intentintent=newIntent();8intent.putExtra(Intent.EXTRA_SHORTCUT_INTENT,shortcutIntent);9intent.putExtra(Intent.EXTRA_SHORTCUT_NAME,"test");10ParcelableiconResource=Intent.ShortcutIconResource.fromContext(this,R.drawable.icon0);11intent.putExtra(Intent.EXTRA_SHORTCUT_ICON_RESOURCE,iconResource);12//将生成的快捷方式递交给系统生成桌面快捷方式13setResult(RESULT_OK,intent);14}

◐◐◐◐●☛█▼▲豪仕知识网███████豪仕知识http://www.Haoz.net▼▲▼▲▼▲▼▲▼●●●●●●●▼▲▼▲▼▲

快捷方式的添加方法和在AndroidManifest中申明远离基本相同。

添加原理知道了,那么在什么时候去触发添加动作

HTTP://WWW.haoz.net豪仕知识网采集不好玩哦◐◐◐◐◐◐◐◐◐◐◐◐◐◐◐◐◐◐◐◐◐◐◐◐◐◐◐◐◐◐撒旦法师打发斯蒂芬

第三步:结合快捷方式列表中点击生成快捷方式

HTTP://WWW.haoz.net◐◐◐◐◐◐◐◐◐◐◐◐◐◐◐◐豪仕知识网

TargetActivity可以是单独为创建快捷方式功能而存在,也可以是应用程序的启动页面。那么来看下在启动页作为TargetActivity的时候,该如何触发添加快捷方式,

代码实现原理是:

◐◐◐◐●☛█▼▲豪仕知识网HT●☛█▼▲◐◐◐◐●☛█▼▲

1.点击桌面快捷方式

◐◐◐◐●☛█▼▲◐◐◐◐●☛█▼▲HtTp://wWW.haoz.net豪仕知识网●●●●●●●●●●●●●●●●●●●●●●●●●●

2.启动TargetActivity

3.添加快捷方式到桌面。

期望结果是没有第二步,点击直接添加到桌面,那么在实现的时候,就可以做下处理:

◐◐◐◐●☛█▼▲豪仕知识网███████豪仕知识网HTtp://www.haoZ.net▼▲▼▲▼▲▼▲▼●●●●●●●▼▲▼▲▼▲

1@Override

2protectedvoidonCreate(BundlesavedInstanceState){3super.onCreate(savedInstanceState);4setContentView(R.layout.dynamic_shortcut);56finalStringintentAction=getIntent().getAction();7if(Intent.ACTION_CREATE_SHORTCUT.equals(intentAction)){8generateShortcut();9finish();10return;11}12}

◐◐◐◐●☛█▼▲豪仕知识网███████豪仕知识http://www.Haoz.net▼▲▼▲▼▲▼▲▼●●●●●●●▼▲▼▲▼▲

这样的话,就达到了期望的结果,到此为止,快捷方式就添加完毕,如果想做成类似“金山开关,360快捷开关”这样的,可以专门做个Dialog样式的Activity来作为TargetActivity。

方式2:通过代码在任意时刻通过任意方式创建

HTTP://WWW.haoz.net豪仕知识网采集不好玩哦◐◐◐◐◐◐◐◐◐◐◐◐◐◐◐◐◐◐◐◐◐◐◐◐◐◐◐◐◐◐撒旦法师打发斯蒂芬

例如通过点击应用里面的某个Button或者应用程序第一次启动,或者。。。,这里看下原理

◐◐◐◐●☛█▼▲豪仕知识网███████http://www.haOZ.net▼▲▼▲▼▲▼▲▼●●●●●●●▼▲▼▲▼▲

1privatevoidcreateShortcut(){

2//快捷方式要启动的Activity3Intenttarget=newIntent();4target.setClassName(this,this.getClass().getName());56//动态生成快捷方式7IntentshortcutIntent=newIntent("com.android.launcher.action.INSTALL_SHORTCUT");8shortcutIntent.putExtra(Intent.EXTRA_SHORTCUT_NAME,"shortcutName");9shortcutIntent.putExtra(Intent.EXTRA_SHORTCUT_ICON_RESOURCE,Intent.ShortcutIconResource.fromContext(this,R.drawable.icon1));10shortcutIntent.putExtra("duplicate",false);11shortcutIntent.putExtra(Intent.EXTRA_SHORTCUT_INTENT,target);1213//利用receiver通知系统创建快捷方式14sendBroadcast(shortcutIntent);1516}

可以看到,和第一种方式实现基本一样,只不过通知系统生成的方式不一样,此处用的是通知。其实第一种方式也可以利用通知来实现。

◐◐◐◐●☛█▼▲豪仕知识网http://www.haOz.net▼▲▼▲▼▲▼▲▼●●●●●●●▼▲▼▲▼▲

添加“duplicate”是表示快捷方式不能重复添加,当然这块和第一种实现方式重复添加不冲突。

http://www.haoz.net●☛█▼▲◐●☛█▼▲◐◐◐◐●☛█▼▲◐豪仕知识网●☛█▼▲豪仕知识网

那么到这里,第二种方式核心实现完成。

扩展

上述仅仅介绍了核心实现,那么对于快捷方式的添加,当然还需要申明创建快捷方式的权限了:

◐◐◐◐●☛█▼▲◐◐◐◐●☛█▼▲HtTp://wWW.haoz.net豪仕知识网●●●●●●●●●●●●●●●●●●●●●●●●●●

1

这个当然不能忘掉。

◐◐◐◐●☛█▼▲◐◐◐◐●☛█▼▲◐◐◐◐●☛█▼▲HTTP://WWW.hAoz.net███████████████████████████东方金报网

还有对于MIUI这种神奇的rom是没有快捷方式这一说的,大家测试的时候,多用些不同的rom机器试试。

◐◐◐◐●☛█▼▲豪仕知识网███████豪仕知识http://www.Haoz.net▼▲▼▲▼▲▼▲▼●●●●●●●▼▲▼▲▼▲

那么既然可以重复创建快捷方式,如果想限制只能有一个快捷方式存在,怎么办,上面设置“duplicate”属性只能限制第二种方式通知添加,而且会有提示,且是系统去判断的,那么我们怎么能自己判断是否已经存在快捷方式了呢,当然可以,来一次看看。

◐◐◐◐●☛█▼▲豪仕知识网http://www.haOz.net▼▲▼▲▼▲▼▲▼●●●●●●●▼▲▼▲▼▲

实现思路可以这么想:快捷方式在桌面,那么如果能获取系统桌面的应用程序属性,判断是否我的应用在被放到了桌面就行。

那么来看下代码:

◐◐◐◐●☛█▼▲豪仕知识网███████豪仕知识http://www.Haoz.net▼▲▼▲▼▲▼▲▼●●●●●●●▼▲▼▲▼▲

1privatebooleanhasShortcut(){

2finalStringAUTHORITY="com.android.launcher.settings";3finalUriCONTENT_URI=Uri.parse("content://"+AUTHORITY+"/favorites?notify=true");4Cursorc=getContentResolver().query(5CONTENT_URI,6newString[]{"title"},7"title=?",8newString[]{"test"},9null);10if(c!=null&&c.moveToNext()){11returntrue;12}13returnfalse;14}

◐◐◐◐●☛█▼▲◐◐◐◐●☛█▼▲◐◐◐◐●☛█▼▲HTTP://WWW.hAoz.net███████████████████████████东方金报网

简单的说明下:

通过Context的getContentResolve获取系统的共享数据,在共享数据中,查找指定Uri的数据,也即launcher中的favorite表,也即快捷方式表。

然后query的参数是筛选表的title列,并且title=“test”的行数据,如果查询有结果,表示快捷方式名为test的存在,也即返回快捷方式已经添加到桌面。

◐◐◐◐●☛█▼▲豪仕知识网http://www.haOz.net▼▲▼▲▼▲▼▲▼●●●●●●●▼▲▼▲▼▲

那么如果你时间了,如果你的测试机是MIUI,或者HTC等rom,你会发现c为null,怎么回事,解释下

android系统桌面的基本信息由一个launcher.db的Sqlite数据库管理,里面有三张表,其中一张表就是favorites。这个db文件一般放在data/data/com.android.launcher(launcher2)文件的databases下。但是对于不同的rom会放在不同的地方,例如MIUI放在data/data/com.miui.home/databases下面,htc放在data/data/com.htc.launcher/databases下面,那么如何用程序来找到这个认证标示呢

1privateStringgetAuthorityFromPermission(Contextcontext,Stringpermission){

◐◐◐◐●☛█▼▲◐◐◐◐●☛█▼▲HtTp://wWW.haoz.net豪仕知识网●●●●●●●●●●●●●●●●●●●●●●●●●●

2if(TextUtils.isEmpty(permission)){3returnnull;4}5Listpacks=context.getPackageManager().getInstalledPackages(PackageManager.GET_PROVIDERS);6if(packs==null){7returnnull;8}9for(PackageInfopack:packs){10ProviderInfo[]providers=pack.providers;11if(providers!=null){12for(ProviderInfoprovider:providers){13if(permission.equals(provider.readPermission)||permission.equals(provider.writePermission)){14returnprovider.authority;15}16}17}18}19returnnull;20}

http://www.haoz.net●☛█▼▲◐●☛█▼▲◐◐◐◐●☛█▼▲◐豪仕知识网●☛█▼▲豪仕知识网

通过Permission来找到这个Authority,那么修改验证方法:

1privatebooleanhasShortcut(){

◐◐◐◐●☛█▼▲豪仕知识网███████http://www.haOZ.net▼▲▼▲▼▲▼▲▼●●●●●●●▼▲▼▲▼▲

2finalStringAUTHORITY=getAuthorityFromPermission(getApplicationContext(),"com.android.launcher.permission.READ_SETTINGS");3finalUriCONTENT_URI=Uri.parse("content://"+AUTHORITY+"/favorites?notify=true");4Cursorc=getContentResolver().query(5CONTENT_URI,6newString[]{"title"},7"title=?",8newString[]{"test"},9null);10if(c!=null&&c.moveToNext()){11returntrue;12}13returnfalse;14}

◐◐◐◐●☛█▼▲◐◐◐◐●☛█▼▲◐◐◐◐●☛█▼▲HTTP://WWW.hAoz.net███████████████████████████东方金报网

这样就可以了,对于某些系统,找不到的话,可能是由于权限原因或者是系统文件顺坏等,你可以通过es explorer工具去找下该文件,并试着用DDMS去读取

DDMS读取文件的时候,我出现了权限问题,参考了/d/file/2024/01/07/61204.html

总结

◐◐◐◐●☛█▼▲◐◐◐◐●☛█▼▲◐◐◐◐●☛█▼▲豪仕知识网HtTp://▲▼▲▼▲

OK,快捷方式通过一天的搜索,试验,找问题,找机器试,总结完毕,把网上出现的一些问题和解决方案都对应的总结了下,希望对大家有帮组。

安卓系统中的几种创建快捷方式的方法的介绍就聊到这里吧,感谢你花时间阅读,更多关于安卓系统中的几种创建快捷方式的方法的信息别忘了在本站进行查找哦。豪仕知识网往后会继续推荐安卓系统中的几种创建快捷方式的方法相关内容。

相关文章