2012-03-11 15 views
1

我試圖讓用戶選擇在按下我的小部件時打開哪個應用程序。看來這樣做的方式是使用ACTION_PICK_ACTIVITY並以某種方式保存他們選擇的值。Android:與AppWidget一起使用ACTION_PICK_ACTIVITY來確定要打開哪個應用程序

http://www.openintents.org/en/node/263似乎很有幫助,但並未顯示如何從Intent中提取數據以便將其保存以供將來的Intent創建。

我該如何輕鬆地讓用戶從安裝在他或她手機上的應用程序列表中進行選擇,然後保存所選擇的包/類用於未來的意圖創建?

View.OnClickListener activity_picker_listener = new View.OnClickListener(){ 
    @Override 
    public void onClick(View v){ 
     // Pick an application 
     Intent mainIntent = new Intent(Intent.ACTION_MAIN, null); 
     mainIntent.addCategory(Intent.CATEGORY_LAUNCHER); 

     Intent pickIntent = new Intent(Intent.ACTION_PICK_ACTIVITY); 
     pickIntent.putExtra(Intent.EXTRA_INTENT, mainIntent); 
     startActivityForResult(pickIntent, 0); 
    } 
}; 

// The result is obtained in onActivityResult: 
protected void onActivityResult(int requestCode, int resultCode, Intent data) { 
    if (data != null) { 
     // save the application that we just picked 
    } 
} 

回答

1

你可以在你的應用程序(SD卡,高速緩存等)保存所選擇的應用程序的包名。然後,當用戶點擊您的小部件,並調用點擊監聽器,你這樣做:

PackageManager packageManager = this.getPackageManager(); 
Intent launchIntent = packageManager.getLaunchIntentForPackage(packageName); 
launchIntent.addCategory(Intent.CATEGORY_LAUNCHER); 
launchIntent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK); 
startActivity(launchIntent); 

UPDATE:

這將讓所有用戶的手機上安裝的應用程序:

Intent intent = new Intent(Intent.ACTION_MAIN, null); 
intent.addCategory(Intent.CATEGORY_LAUNCHER); 
List<ResolveInfo> applications = getPackageManager().queryIntentActivities(intent, 0); 

ResolveInfo類包含大量有關應用程序的有用信息,包括其包名。一旦用戶選擇了一個應用程序,您就可以從其ResolveInfo對象中獲取包名,並使用其他代碼打開該程序。

+0

謝謝,這有幫助,但我的問題是如何正確地將該包名保存在首位? – 2012-03-13 13:58:03

+0

檢查更新。 – 2012-03-18 04:39:50

+0

除非將標誌PackageManager.MATCH_DEFAULT_ONLY添加到您對queryIntentActivities()的調用中,否則您將得到一個空的結果。因此,正確的調用是: 列表 applications = getPackageManager()。queryIntentActivities(intent,PackageManager.MATCH_DEFAULT_ONLY); – 2015-05-23 02:41:56

相關問題