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

标签 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;
}

最佳答案

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

默认拨号应用

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;

关于android - 如何在 android 中获取操作系统默认应用程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44995156/

相关文章:

java - 如何在搜索 View 中强制写入大写?

android - 数据和同步 - 手动同步邮件。日历和联系人

android - 如何在我的应用程序(启动器)中托管 AppWidgets?

Android覆盖主页键

android - 强制 android 使用方形启动器图标

android - Android 应用程序可以与另一个应用程序交互吗?

android - 如何向 AOSP 添加自定义 INTENT 以授予对系统级控制调用的访问权限?

java - Android - 如何在 setColor 中更改颜色

android - 三星Touchwiz始终在Android 4.1.1中启动时提示默认应用程序

java - 获取具有 2 个或更多 Activity 的应用程序