您的位置:首页 > 编程语言

如何使用程序代码设定偏好应用

2015-05-29 11:55 399 查看
quote:基于代码Android 4.4

项目开发中遇到一个需求,在系统有多个桌面应用的情况下,开机启动指定的桌面。

这个跟我们平常有多个桌面时,一般会弹出框让我们选择偏好桌面。这篇文章中,我们将来看看如何在程序代码中设定某个应用为偏好桌面。

如何找到系统中所有的桌面应用程序

<span style="font-size:18px;">private PackageManager mPackageManager;
private List<ResolveInfo> mResolveInfos;
Intent intent = new Intent();
intent.setAction(Intent.ACTION_MAIN);
intent.addCategory(Intent.CATEGORY_HOME);
//Query all the launcher
mResolveInfos = mPackageManager.queryIntentActivities(intent, PackageManager.MATCH_DEFAULT_ONLY);</span>

注:在Android中,一般对包的操作都是在PackageManagerService或者PackageManager中进行的。

这个queryIntentActivies就是查找所有的包中匹配上面设置的匹配Intent.ACTION_MAIN和Intent.CATEGORY_HOME,并且还包含Intent.CATEGORY_DEFAULT的包。注意存储查询结果的是一个List<ResolveInfo>类型的数据。

可以通过下面的代码获取搜索到的应用的包名和名称:

ResolveInfo resolveInfo = mResolveInfos.get(i);
String fullClassname = resolveInfo.activityInfo.name;
String packagename = resolveInfo.activityInfo.packageName;
可以通过如下代码获取所有设定的偏好程序:
mPackageManager.getPreferredActivities(List<IntentFilter> outFilters, List<ComponentName> outActivities, String packageName);
//这里可以过滤满足一定条件的应用程序,比如下面过滤出了桌面应用
if(outFiltersi.hasAction(Intent.ACTION_MAIN) && outerFiltersi.hasCategory(Intent.CATEGORY_HOME))

如何设置偏好应用呢?

首先,我们看看设置偏好应用要用到那个API:

第一步,如果存在一个已经设置的偏好应用,先清除原来的

<span style="font-size:18px;">mPackageManager.clearPackagePreferredActivities(mDefaulCN.getPackageName());</span>
​第二步,设置新的偏好应用

<span style="font-size:18px;">mPackageManager.addPreferredActivity(IntentFilter filter, int match, ComponentName[] set, ComponentName activity)</span>
​如何初始化这些参数:

ResolveInfo resolveInfo = mResolveInfos.get(position);
ActivityInfo activityInfo = resolveInfo.activityInfo;
//设定设置应用的componentsName
ComponentName componentName = new ComponentName(activityInfo.packageName,activityInfo.name);
Intent intent = new Intent();
intent.setComponent(componentName);

//设置API中的参数过滤器
IntentFilter filter = new IntentFilter();
filter.addAction(Intent.ACTION_MAIN);
filter.addCategory(Intent.CATEGORY_HOME);
filter.addCategory(Intent.CATEGORY_DEFAULT);

//设置API中的set参数
ComponentName[] componentName = {componentName};
//设置match为静态常量值
int match = IntentFilter.MATCH_CATEGORY_HOST;
//调用API将指定component的应用设为偏好应用,Set this launcher as default
mPackageManager.addPreferredActivity(filter, bestMatch, set,intent.getComponent());

注意,应用名称的取得,最好使用API:

mPackageManager.queryIntentActivities

取得,这样能够确保该应用确实安装在手机上了,是一个有效的内容。然后我们再在有效的内容上面进行操作,而不是直接简单粗暴的给intent赋值一个component值,可能会导致一些不可预计的错误。

总结:

在本文中,我们主要讲述了这样几点内容:

1. 如何取得所有的偏好程序

     从取得的输出内容里面,我们可以通过判断IntentFilter内容,过滤出我们想要知道的应用名称。

2. 如何设置我们需要的偏好应用

     包括先清除原来的偏好应用,并且初始化一些值作为调用addPreferredActivity的参数,设置我们选定的应用程序。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: