1

パッケージ名 のアプリケーションがあるとしますcom.example

アプリケーションには、インテント フィルタを持つアクティビティがありますandroid.intent.action.SEND

ここで、上記のインテント フィルターをサポートするコンポーネント クラスをプログラムで見つけたいと考えています。

このコードは、ACTION_SEND に一致するすべてのクラスをフィルタリングします。

Intent sendIntent = new Intent();
sendIntent.setAction(Intent.ACTION_SEND);
sendIntent.putExtra(Intent.EXTRA_TEXT, "This is my text to send.");
sendIntent.setType("text/plain");
startActivity(sendIntent);

しかし、私は、一致するパッケージからのみアクティビティを選択したいと考えていますcom.example

4

2 に答える 2

2

PackageManager は、Context.getPackageManager()およびqueryIntentActivitiesを使用して取得できます。その意図を実行できるアクティビティの ResolveInfo を返すことを検討している意図があります。

ResolveInfo.activityInfoは、フィルタリングしようとしているpackageNameを持つ ActivityInfo を提供します。

必要なターゲットを選択したら、パッケージ名とクラスを使用してそのアクティビティのComponentNameを作成し、必要なインテントでsetComponent()を使用して、必要なアクティビティを明示的にターゲットにすることができます。

于 2013-08-09T14:48:33.867 に答える
0

これが私がそれを達成した方法です。インテントをサポートするすべてのパッケージのリストを取得します。

List<ResolveInfo> rInfo =  getActivity().getPackageManager().queryIntentActivities(createShareIntent(),0);
for(ResolveInfo r:rInfo){
    if(r.activityInfo.packageName.equals("com.example")){

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

Intent choiceIntent = new Intent(createShareIntent());
choiceIntent.setComponent(chosenName);
startActivity(choiceIntent);

共有インテントを作成する

private Intent createShareIntent() {
    Intent shareIntent = new Intent(Intent.ACTION_SEND);
    shareIntent.putExtra(Intent.EXTRA_TEXT,"Message");
    shareIntent.setType("text/plain");
    shareIntent.putExtra(Intent.EXTRA_SUBJECT, "Subject...");
    return shareIntent;
}
于 2013-08-22T11:26:43.143 に答える