2012-06-22 29 views
0

我目前正在製作一個Android啓動器,並且花了很多時間在Stackoverflow上關於如何去做不同的事情。然而,我從我自己的開放應用程序中遇到了麻煩。我使用的代碼是從這個主題的其他問題拼湊在一起的。我現在有一個安裝的應用程序列表,但點擊後,我的應用程序重新打開。我想我以錯誤的方式使用錯誤的意圖,但不知道如何解決問題。所以我的問題是: 什麼是打開選定的應用程序更好的方式?以下是使用的代碼。注意:我是編碼的初學者。是否有可能以我嘗試的方式啓動應用程序?

PackageManager pm = this.getPackageManager(); 
Intent intent = new Intent(Intent.ACTION_MAIN, null); 
intent.addCategory(Intent.CATEGORY_LAUNCHER); 

List <String> myList = new ArrayList <String>(); 
ArrayList <ResolveInfo> list = (ArrayList <ResolveInfo>) pm.queryIntentActivities(intent, PackageManager.PERMISSION_GRANTED); 
for (ResolveInfo rInfo: list) { 
    System.out.println("Installed Applications " + rInfo.activityInfo.applicationInfo.loadIcon(pm).toString() + rInfo.activityInfo.applicationInfo.loadLabel(pm).toString()); 
    myList.add(rInfo.activityInfo.applicationInfo.loadLabel(pm).toString()); 


} 

ListView lists = (ListView) findViewById(R.id.content); 
ArrayAdapter <String> aa = new ArrayAdapter <String> (this, android.R.layout.simple_list_item_1, myList); 
lists.setAdapter(aa); 

lists.setOnItemClickListener(new OnItemClickListener() { 

    public void onItemClick(AdapterView <? > parent, View view, int position, long id) { 
     Intent i = new Intent("android.intent.action.MAIN"); 
     i.addCategory("android.intent.category.LAUNCHER"); 
     PackageManager pm = getPackageManager(); 
     i = pm.getLaunchIntentForPackage(getPackageName()); 

     startActivity(i); 
    } 
}); 
+1

'getPackageName()'方法返回當前'Activity'的包名,這就是爲什麼'getLaunchIntentForPackage(getPackageName())'只是重新啓動你自己的應用程序。枚舉其他應用程序後,您需要獲取*他們的包名稱並使用單擊的列表項中的名稱。 – Squonk

回答

3

你寫得太好了代碼,但唯一的錯誤,你所做的就是

i = pm.getLaunchIntentForPackage(getPackageName()); 
startActivity(i); 

這裏所有的努力得到浪費,因爲你完全顯示所有的應用程序的名稱,但應用程序名稱的onClick你上面的代碼執行。但getPackageName()將返回當前活動包名hense,無論您點擊哪個項目將重新啓動您的應用程序。

所以只要改變

i = pm.getLaunchIntentForPackage(getPackageName()); 

爲了這

i = pm.getLaunchIntentForPackage(list.get(position).activityInfo.packageName); 

它將開始在其上單擊應用程序!

+0

謝謝! @Vipul ... – KDev

+0

歡迎您:) –

相關問題