在开发过程中,遇到一个需求是要在桌面创建应用程序的快捷的方式,当时从网上一查资料,发现还挺简单的,可是做完之后发现在判断桌面是否已经创建快捷方式这一块出了问题。
一开始按照网上的方法我是这样判断桌面是否已经创建快捷方式的:
private boolean isShortCutCreat() {
boolean isInstallShortCut = false;
ContentResolver contentReslver = getContentResolver();
String AUTHORITY = null;
if(Build.VERSION.SDK_INT>=8){
AUTHORITY = "com.android.launcher2.settings";
}
else{
AUTHORITY = "com.android.launcher.settings";
}
Uri content_uri = Uri.parse("content://" + AUTHORITY+ "/favorites?notify=true");
Cursor cursor = contentReslver.query(content_uri, new String[] { "title", "iconResource" }, "title=?", new String[] { getString(R.string.app_name)}, null);
if(null!=cursor&&cursor.getCount()>0){
isInstallShortCut = true;
}
return isInstallShortCut;
}
如果是安卓原生的系统,按照上面的方式是可以正确拿到上面的AUTHORITY以判断快捷方式是否已创建,但是在今天这个各大手机厂商随意定做ROM的年代,用上面的方式显然已经不能满足需求,(因为在我的小米手机上就拿不到AUTHORITY...)。之后在网上找了很多解决的办法都没有很好的解决,最后发现了一个获得AUTHORITY的好方法,分享出来给大家:
public String getAuthorityFromPermission(Context context, String permission){
if (permission == null){
return null;
}
List<PackageInfo> packs = context.getPackageManager().getInstalledPackages(PackageManager.GET_PROVIDERS);
if (packs != null) {
for (PackageInfo pack : packs) {
ProviderInfo[] providers = pack.providers;
if (providers != null) {
for (ProviderInfo provider : providers) {
if (permission.equals(provider.readPermission))
return provider.authority;
if (permission.equals(provider.writePermission))
return provider.authority;
}
}
}
}
return null;
}
经过测试,按照上面的方法不管是山寨机还是小米和华为,基本上都能正确获得AUTHORITY,从而判断出快捷方式是否已经创建。