Установленный Android Fetch и браузер по умолчанию на устройстве

Я могу получить все приложения, которые есть в Launcher, с помощью Intent.CATEGORY_LAUNCHER.

Итак, для тестирования я создал тестовую активность, эта активность содержит одну кнопку, если я нажму кнопку, она должна отображать приложения на устройстве.

NOTE: `it should not display specific. for example i needed only Browser it should display all browser applications.`

Я попробовал таким образом небольшой КОД:

btn.setOnClickListener(new OnClickListener() {

        public void onClick(View v) {
            Intent intent = new Intent(Intent.ACTION_MAIN);
            intent.addCategory(Intent.CATEGORY_APP_BROWSER);

            List<ResolveInfo> mainLauncherList = getPackageManager().queryIntentActivities(intent, 0);
            System.out.println("the list iss = " +mainLauncherList);
        }
    });

Список возвращает только один браузер, который является одним браузером.


person Sukesh    schedule 09.05.2012    source источник


Ответы (3)


Вместо категории дайте намерению действие и запросите те, которые могут ACTION_VIEW указать URL-адрес, например:

Intent intent = new Intent(Intent.ACTION_VIEW);
intent.setData(Uri.parse("http://www.google.com"));

List<ResolveInfo> mainLauncherList = getPackageManager().queryIntentActivities(intent, 0);
Log.e("Browsers","the list iss = " +mainLauncherList);

Что возвращает что-то вроде:

[ResolveInfo{44e9d350 com.android.browser.BrowserActivity p=0 o=0 m=0x208000}]

И если у вас установлено более одного браузера, он будет содержать их все. Возможно, я неправильно понял ваш вопрос, но технически это возвращает те же приложения, которые вы получили бы, если бы попытались запустить намерение открыть URL-адрес.

Что касается получения активности запуска этих приложений, поскольку вы уже знаете, как получить все основные приложения, и по коду, который я дал, тот, который вам нужен, вы можете сопоставить имена пакетов (предположительно), чтобы найти средство запуска ( ?)

ОБНОВЛЕНИЕ

ArrayList<String> allLaunchers = new ArrayList<String>();

Intent allApps = new Intent(Intent.ACTION_MAIN);
List<ResolveInfo> allAppList = getPackageManager().queryIntentActivities(allApps, 0);
for(int i =0;i<allAppList.size();i++) allLaunchers.add(allAppList.get(i).activityInfo.packageName);

Intent myApps = new Intent(Intent.ACTION_VIEW);
       myApps.setData(Uri.parse("http://www.google.es"));
List<ResolveInfo> myAppList = getPackageManager().queryIntentActivities(myApps, 0);
for(int i =0;i<myAppList.size();i++){
    if(allLaunchers.contains(myAppList.get(i).activityInfo.packageName)){
        Log.e("match",myAppList.get(i).activityInfo.packageName+"");
    }
}

Как я уже говорил, вы получаете все пакеты из лаунчера и сопоставляете их с пакетами из тех, которые могут выполнять действия, будь то фотосъемка или просмотр веб-страниц. Вы должны быть в состоянии заставить эту вещь идти с этим.

person Juan Cortés    schedule 09.05.2012
comment
Да, спасибо, беспредел, вы сказали, что это правильно, это работает для меня, но я планирую создать собственное приложение для запуска, если пользователь выберет параметр браузера, точно рядом с ним я получу такие параметры, как Mozilla, Opera, Dolphin, которые установил с маркета. - person Sukesh; 09.05.2012
comment
привет, это работает для меня для базового приложения браузера, так же, как я хочу получить информацию, например, сколько камер / приложений для обмена сообщениями установлено на моем устройстве, это может быть приложение по умолчанию + стороннее приложение. пожалуйста, предложите мне, если есть какие-либо идеи для этого. - person Sukesh; 09.05.2012
comment
@Sukesh, это так же просто, как заменить действие вашего фильтра на Intent myApps = new Intent(MediaStore.ACTION_IMAGE_CAPTURE); и удалить строку setData. Я уверен, что вы можете выяснить остальные из них, проведя небольшое исследование. Пожалуйста, +1 ответ ^ - person Juan Cortés; 09.05.2012
comment
Есть ли способ получить из закладок браузера имя пакета uri? - person Flash Thunder; 29.01.2015
comment
и он возвращает 748 всех размеров Launchers - person Mohd Qasim; 19.01.2021
comment
Учитывая, что ему почти 10 лет, возможно, поищите менее устаревший ответ. - person Juan Cortés; 19.01.2021

Если кому еще нужен ответ:

public static void getBrowserApps(Context mcontext) {
        PackageManager packageManager = mcontext.getPackageManager();
        Intent intent = new Intent(Intent.ACTION_VIEW);
        intent.setData(Uri.parse("http://www.google.com"));
        List<ResolveInfo> list = packageManager.queryIntentActivities(intent,
        PackageManager.MATCH_ALL);}

list будет содержать информацию о пакетах всех браузеров.

person Saad Mahmud    schedule 05.02.2018
comment
Это решение охватывает важный флаг (PackageManager.MATCH_ALL). В противном случае возвращается только браузер по умолчанию. - person kiran puppala; 27.07.2019

API выше версии 30 мне нужно было добавить раздел queries в AndroidManifest.xml из-за нового правила видимости пакета (в дополнение к использованию PackageManager.MATCH_ALL, как указано выше).

<manifest ...>
    <application ... />
    <queries>
        <intent>
            <action android:name="android.intent.action.VIEW" />
            <data android:scheme="http" />
        </intent>
    </queries>
</manifest>
person neu242    schedule 22.01.2021