如何在android中获取操作系统默认应用程序

时间:2017-07-09 09:56:36

标签: android android-launcher

我正在开发一个启动器应用,我需要检索Android操作系统默认的手机应用,浏览器应用和短信应用,应用信息(应用名称,包名称,启动器图标)。以下代码用于获取所有可启动的应用程序。

private static List<ApplicationInfo> getInstalledApps(Context context, PackageManager pm) {
    List<ApplicationInfo> installedApps = context.getPackageManager().getInstalledApplications(0);
    List<ApplicationInfo> laughableInstalledApps = new ArrayList<>();
    for(int i =0; i<installedApps.size(); i++){
        if(pm.getLaunchIntentForPackage(installedApps.get(i).packageName) != null){
            laughableInstalledApps.add(installedApps.get(i));
        }
    }
    return laughableInstalledApps;
}

2 个答案:

答案 0 :(得分:0)

尝试使用PackageManager#getPreferredActivities(java.util.List, java.util.List, java.lang.String),其中第一个参数是IntentFilter的列表,您希望获得默认应用。然后答案写在作为第二个参数传递的列表中。

Here是您可能尝试查找默认应用的一些常见意图。

答案 1 :(得分:0)

花了一些时间在代码后,我找到了一种方法得到了我想要的东西。

默认拨号应用

Intent mainIntent = new Intent(Intent.ACTION_DIAL, null);
mainIntent.addCategory(Intent.CATEGORY_DEFAULT);
List<ResolveInfo> pkgAppsList = getPackageManager().queryIntentActivities(mainIntent, 0);
ActivityInfo info = pkgAppsList.get(0).activityInfo;

默认短信应用

String smsPkgName = Telephony.Sms.getDefaultSmsPackage(context);
ApplicationInfo info = getPackageManager().getApplicationInfo(smsPkgName, 0);

默认浏览器应用

Intent browserIntent = new Intent(Intent.ACTION_VIEW, Uri.parse("http://"));
ResolveInfo resolveInfo = getPackageManager().resolveActivity(browserIntent, 
    PackageManager.MATCH_DEFAULT_ONLY);
ActivityInfo info = resolveInfo.activityInfo;