2012-05-09 117 views
4

我能夠在Intent.CATEGORY_LAUNCHER的幫助下獲取啓動器中的所有應用程序。Android Fetch已安裝且設備中的默認瀏覽器

所以對於測試中,我創建了一個測試活動,該活動包含一個按鈕,如果我按下按鈕,它應該在設備

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

該列表僅返回一個瀏覽器,即單個瀏覽器。

回答

6

而是一類的,給意圖的動作和查詢那些可能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的意圖,你會得到相同的應用程序。

至於讓這些應用程序的發射活動,因爲你已經知道如何讓所有主要的應用程序,並通過我給的代碼,你後一個,你可以匹配的包名(assumably)找到發射器一個(?)

UPDATE

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+""); 
    } 
} 

就像我說的,你得到所有的包,從啓動,並從能夠執行的動作的名稱相符他們反對包,無論是拍照還是瀏覽網頁。你應該能夠通過這件事情得到解決。

+0

雅感謝ü混亂,U說的是對的爲我工作,但我打算做一個自定義啓動應用程序在此,如果用戶通過它來選擇瀏覽器選項,正好身邊,我會得到如Mozilla,Opera中的選項,從市場上安裝的海豚。 – Sukesh

+0

檢查更新,如果有幫助,請+1。 –

+0

嗨,這是爲我的瀏覽器的基礎應用程序,以同樣的方式我想獲得像我的設備上安裝了多少相機/消息應用程序,可以是默認+第三方應用程序的相同方式。 請給我建議,如果有任何想法。 – Sukesh

0

如果別人需要的答案:

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將包含所有的瀏覽器軟件包信息。