2011-05-13 14 views
0

UPDATEヘルプ:私は上のすべてのインストール済みのアプリケーションのリストビューをdiplaysアプリを持っている今、PIDOnItemClickListener ...

とは対照的に、パッケージ名を探しにデバイス。メソッドに選択されたアプリケーションのPackage Nameを渡すOnItemClickListenerを作成したいと思います。すべてのヘルプをいただければ幸いです

public class Main extends ListActivity { 

    private static final int ACTIVITY_CREATE=0; 
    public static final int Menu1 = Menu.FIRST; 


    /** Called when the activity is first created. */ 
    @Override 
    public void onCreate(Bundle savedInstanceState) 
    { 
     super.onCreate(savedInstanceState); 

     final PackageManager pm = this.getPackageManager(); 

     Intent intent = new Intent(Intent.ACTION_MAIN, null); 
     intent.addCategory(Intent.CATEGORY_LAUNCHER); 

     final ArrayList<ResolveInfo> list = 
       (ArrayList<ResolveInfo>) pm.queryIntentActivities(intent, 
         PackageManager.PERMISSION_GRANTED); 
     for (ResolveInfo rInfo : list) 
     { 
      Log.i("Installed Applications " + rInfo.activityInfo. 
        applicationInfo.loadLabel(pm).toString(), null); 
     } 

     final ArrayAdapter<ResolveInfo> adapter = 
      new ArrayAdapter<ResolveInfo>(this, R.layout.list_item, list) 
      { 
      @Override 
      public View getView(int position, View convertView, ViewGroup parent) 
      { 
       if (convertView == null) 
        convertView = LayoutInflater.from(parent.getContext()). 
         inflate(R.layout.list_item, parent, false); 

       final String text = list.get(position).activityInfo. 
        applicationInfo.loadLabel(pm).toString(); 
       ((TextView)convertView.findViewById(R.id.text)).setText(text); 

       final Drawable drawable = list.get(position).activityInfo.applicationInfo.loadIcon(pm); 
       ((ImageView)convertView.findViewById(R.id.image)).setImageDrawable(drawable); 

       return convertView; 
      } 

      }; 
     setListAdapter(adapter); 

     ListView lv = getListView(); 
     lv.setTextFilterEnabled(true); 
     lv.setOnItemClickListener(new OnItemClickListener() { 
      public void onItemClick(AdapterView<?> parent, View view, 
       int position, long id) { 

       // On Item Click Activity 

       // This is where I would like to pass the package name to a method 
      } 
      }); 
    } 

は、ここに私のコードです!

答えて

1

あなたはアイテムあなただけをクリックResolveInfoインスタンスのactivityInfoメンバーのパッケージ名取り出すことができます助けを

lv.setOnItemClickListener(new AdapterView.OnItemClickListener() 
{ 
    @Override 
    public void onItemClick(AdapterView<?> parent, View view, int position, long id) 
    { 
     final String packageName = list.get(position).activityInfo.packageName; 
     Log.i("PACKAGE", packageName); 
     //TODO: Pass this packageName to a method 
    } 
}); 
0

アプリケーションに複数のPIDがある可能性があります。 ActivityManagerのドキュメントを見てください。 http://developer.android.com/reference/android/app/ActivityManager.html

ベースとしてこれを使用します。

ActivityManager am = (ActivityManager)getSystemService(Context.ACTIVITY_SERVICE); 
List<RunningAppProcessInfo> activities = am.getRunningAppProcesses(); 
for (int i=0; i< activities.size(); i++) 
    Log.d ("PID INFO", "Activity " + i + " - PID: " + activities.get(i).pid); 
} 

そして、ところで、そんなにコード次回を投稿しないでください。あなたの質問には関係ありません:)

+0

感謝を。私は、次のようなfor文でエラーが発生しています: "メソッドの長さ()はList 型の定義されていません。 –

+0

PIDのアイデアを破棄して、パッケージを渡すOnItemClickListenerを探していますリストビューでメソッドに選択されたアプリケーションの名前 –

+0

@Frank my bad!リストの長さ()ではなくsize()です。その部分は結果を反復するだけです。 (0).pid' – Aleadam

0

pidsとアプリを関連付けるのは基本的には間違いです。 1つのアプリは複数のpidで実行でき、1つのpidは複数のアプリを実行できます。実際に何をしようとしていても(有用な助けをするのは難しいとは言わない)、これは方法ではありません。

+0

入力していただきありがとうございます。 –

関連する問題