Вместо категории дайте намерению действие и запросите те, которые могут 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