0

インストールされているすべてのアプリケーションを一覧表示する ListApp アクティビティがあります。ここでやろうとしているのは、ユーザーがリストからアプリを選択すると、選択したアプリに関するインテント/情報を取得する必要があり、ユーザーがボタン1をクリックすると、以前に選択したアプリを開く必要があります(以前に取得したインテントの助けを借りて)。

ListApp アクティビティ:

 @Override
public void onClick(View arg0) {
    // TODO Auto-generated method stub

    switch (arg0.getId()){

    case R.id.button1:

        //startActivity(app.intent);
        //should start app with the help of info received by selecting app from the  list
        break;
    }


    @Override
public void onItemClick(AdapterView<?> parent, View v, int position, long id) {

//ApplicationInfo app = (ApplicationInfo) parent.getItemAtPosition(position);
    //startActivity(app.intent);        

//instead of launching app, I would like to get the info about the selected app & use it(start app) when clicking button1
}

アプリケーション情報

class ApplicationInfo {

CharSequence title;
Intent intent;
Drawable icon;
boolean filtered;

  final void setActivity(ComponentName className, int launchFlags) {
    intent = new Intent(Intent.ACTION_MAIN);
    intent.addCategory(Intent.CATEGORY_LAUNCHER);
    intent.setComponent(className);
    intent.setFlags(launchFlags);
    }
}

みんな、ありがとう :)

4

1 に答える 1

0

アプリのパッケージ名がわかっている場合は、リストのインデックスからアクティビティ情報を取得します。

List<ResolveInfo> rInfo =  getPackageManager().queryIntentActivities(new Intent(Intent.ACTION_MAIN),MATCH_DEFAULT_ONLY);

for(ResolveInfo resolveInfo:rInfo){
    if(resolveInfo.activityInfo.packageName.equals("package")){

コンポーネントを解決情報から設定します。

        ComponentName chosenName = new ComponentName(
        resolveInfo.activityInfo.packageName,
        resolveInfo.activityInfo.name);
        break;
     }
 }

final Intent intent = new Intent(Intent.ACTION_MAIN, null);
intent.addCategory(Intent.CATEGORY_LAUNCHER);
intent.setComponent(chosenName);
startActivity(intent);

コンポーネントを上記のように設定します。

public ComponentName (文字列 pkg、文字列 cls)

API レベル 1 で追加 新しいコンポーネント識別子を作成します。

パラメータ pkg コンポーネントが存在するパッケージの名前。null にすることはできません。cls コンポーネントを実装する pkg 内のクラスの名前。null にすることはできません。

于 2013-08-10T17:48:26.303 に答える