我试图检测我的应用是否是默认启动器。当启动器应用程序与Always And Just一起发布时。
每当我点击“JUST ONCE”时我的应用认为它是默认的?为什么会这样?
我使用以下内容检查默认部分:
private boolean isMyLauncherDefault()
{
final IntentFilter filter = new IntentFilter(Intent.ACTION_MAIN);
filter.addCategory(Intent.CATEGORY_HOME);
List<IntentFilter> filters = new ArrayList<IntentFilter>();
filters.add(filter);
final String myPackageName = getPackageName();
List<ComponentName> activities = new ArrayList<ComponentName>();
final PackageManager packageManager = (PackageManager) getPackageManager();
// You can use name of your package here as third argument
packageManager.getPreferredActivities(filters, activities, null);
for (ComponentName activity : activities)
{
if (myPackageName.equals(activity.getPackageName()))
{
return true;
}
}
return false;
}
答案 0 :(得分:2)
使用此:
private boolean isMyLauncherDefault()
{
boolean returnValue = false;
Intent intent = new Intent("android.intent.action.MAIN");
intent.addCategory("android.intent.category.HOME");
intent.addCategory("android.intent.category.DEFAULT");
PackageManager pm = context.getPackageManager();
final ResolveInfo mInfo = pm.resolveActivity(intent, 0);
if (mInfo != null) {
if(myAppname.equals
(pm.getApplicationLabel(mInfo.activityInfo.applicationInfo))
returnValue = true;
}
return returnValue;
}
编辑:
getPreferredActivities:返回已注册首选活动的总数。 检索以前使用addPreferredActivity(IntentFilter,int,ComponentName [],ComponentName)添加的所有首选活动,这些活动当前已在系统中注册。 我认为这将返回为该特定意图注册的所有活动名称。
resolveActivity:返回一个ResolveInfo,其中包含被确定为最佳操作的最终活动意图。如果未找到匹配的活动,则返回null。因此,在这种情况下,我们通过指定CATEGORY_DEFAULT
来限制解析活动以匹配DEFAULT应用。
查看Hackborn回答的post我们应该使用resolveActivity()
查找默认应用。