【问题标题】:How to get the list of installed Browser Apps in an Android 7.0 running devices programmatically?如何以编程方式在运行 Android 7.0 的设备中获取已安装浏览器应用程序的列表?
【发布时间】:2025-12-16 06:35:01
【问题描述】:

在 Android 7.0 之前,我能够检索已安装浏览器类型应用程序的列表及其包名称。然后,我升级到 Android 7.0,我只能检索三星的 Internet 浏览器,而不能检索 Chrome 等其他浏览器类型的应用程序。

设备Samsung Tab A

这是代码:

public static List<String> getListOfBrowser(Context context) {
    List<String> browserPackageName = new ArrayList<String>();
    try {
        Intent intent = new Intent(Intent.ACTION_VIEW);
        intent.setData(Uri.parse("http://www.google.com"));
        PackageManager pm = context.getPackageManager();
        List<ResolveInfo> browserList = pm.queryIntentActivities(intent, 0);
        for (ResolveInfo info : browserList) {
            browserPackageName.add(info.activityInfo.packageName);
            Log.e("BrowserList Info ",info.activityInfo.packageName+" total browser"+browserList.size());
        }
    } catch (Exception e) {
        e.printStackTrace();
        Log.e("BrowserList Info ",e.getMessage());
    }
    return browserPackageName;
}

【问题讨论】:

    标签: java android samsung-mobile-sdk


    【解决方案1】:

    如果 Android API 级别 >= 23,那么您可以这样做:

    List<ResolveInfo> browserList;
    if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.MARSHMALLOW) {
        // gets all
        browserList = pm.queryIntentActivities(intent, PackageManager.MATCH_ALL);
        // only the defaults
        browserList = pm.queryIntentActivities(intent, PackageManager.MATCH_DEFAULT_ONLY);
    } else {
        browserList = pm.queryIntentActivities(intent, 0);
    }
    

    【讨论】:

      【解决方案2】:

      代码看起来不错。但是,您应该使用 PackageManager.MATCH_DEFAULT_ONLY 标志 -

      pm.queryIntentActivities(intent, PackageManager.MATCH_DEFAULT_ONLY);
      

      而不是

      pm.queryIntentActivities(intent, 0);
      

      【讨论】:

      • 列表中仍然只给出三星浏览器
      最近更新 更多