How to get the list of installed Browser Apps in a

2020-07-13 11:48发布

Before Android 7.0 I was able to retrieve the list of installed browser type applications and it's package name. Then, I upgrade to Android 7.0 and I am only able to retrieve Samsung's Internet browser, but not the other browser type applications such as Chrome .

Device Samsung Tab A

This is the code :

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

2条回答
Lonely孤独者°
2楼-- · 2020-07-13 12:19

Code looks fine. However you should use PackageManager.MATCH_DEFAULT_ONLY flag -

pm.queryIntentActivities(intent, PackageManager.MATCH_DEFAULT_ONLY);

instead of

pm.queryIntentActivities(intent, 0);
查看更多
Anthone
3楼-- · 2020-07-13 12:25

If Android API level >= 23, then you can do like so:

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);
}
查看更多
登录 后发表回答