如果我的手机安装了3-4个家用(启动器)应用程序,当我按下主页键时,它会显示一个对话框,显示我手机上安装的家庭应用程序,然后我会选择一个默认。我的问题是: 我可以通过代码获取默认家庭应用程序的包名吗?
解决它,使用follow api。
public abstract int getPreferredActivities (List<IntentFilter> outFilters, List<ComponentName> outActivities, String packageName)
答案 0 :(得分:8)
你有没看过: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 packageManager,
public abstract int getPreferredActivities (List<IntentFilter> outFilters,List<ComponentName> outActivities, String packageName)
答案 1 :(得分: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;
}
答案 2 :(得分: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 "";
}
}