只需一次在android中的启动器选项中

时间:2014-04-16 04:06:56

标签: android android-launcher

我试图检测我的应用是否是默认启动器。当启动器应用程序与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;
}

1 个答案:

答案 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()查找默认应用。