如何获取安卓系统默认的主屏幕应用名称?

4
如果我的手机安装了3-4个主屏应用程序,当我按下主屏键时,它将显示一个对话框,显示已安装在我的手机上的主屏应用程序,然后我将选择一个作为默认值。我的问题是:能否通过代码获取默认主屏应用程序的包名?
解决方法是使用以下API。
public abstract int getPreferredActivities (List<IntentFilter> outFilters, List<ComponentName> outActivities, String packageName)

主屏幕上使用应用程序或小部件? - Prateek
这是默认启动器(主屏幕应用程序),例如,Facebook Home 是我的默认主屏幕,我如何通过代码获取其包名。 - Crystal Jake
3个回答

9
你看过这个吗:

PackageManager.resolveActivity()

Intent intent= new Intent(Intent.ACTION_MAIN);
intent.addCategory(Intent.CATEGORY_HOME);
ResolveInfo defaultLauncher= getPackageManager().resolveActivity(intent, PackageManager.MATCH_DEFAULT_ONLY);
String nameOfLauncherPkg= defaultLauncher.activityInfo.packageName;

确保您使用HOME意图,因为您的启动器显然在主页上。
尚未使用,但您可以尝试使用另一个标志,即“PackageManager.GET_INTENT_FILTERS”代替。
PackageManager.MATCH_DEFAULT_ONLY

最终解决方案:
API包管理器,
public abstract int getPreferredActivities (List<IntentFilter> outFilters,List<ComponentName> outActivities, String packageName)

但是我想知道默认使用哪个主屏幕,如果我在手机上安装了多个主屏幕应用程序。 - Crystal Jake
我在PackageManager中找到了这个API,它可以解决我的问题:public abstract int getPreferredActivities(List<IntentFilter> outFilters, List<ComponentName> outActivities, String packageName)。 - Crystal Jake

0
这是一个返回包含设备上所有主屏应用程序的字符串数组的方法:
public String[] getDefaultLauncherList() {
    final Intent intent = new Intent(Intent.ACTION_MAIN); 
    intent.addCategory(Intent.CATEGORY_HOME); 
    final List<ResolveInfo> list = ((PackageManager)getPackageManager()).queryIntentActivities(intent, 0);      
    String[] toReturn=new String[list.size()];
    for(int i=0;i<list.size();i++)
        toReturn[i]=list.get(i).activityInfo.packageName;
    return toReturn;     
}

0

这是我使用的方法:

private String nameOfHomeApp()
    {
        try {
            Intent i = new Intent(Intent.ACTION_MAIN);
            i.addCategory(Intent.CATEGORY_HOME);
            PackageManager pm = getPackageManager();
            final ResolveInfo mInfo = pm.resolveActivity(i, PackageManager.MATCH_DEFAULT_ONLY);
            return mInfo.activityInfo.packageName;
        }
        catch(Exception e)
        {
            return "";
        }

    }

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接