3

createChooser()ユーザーがダイアログで最初のオプションを選択したかのように、指定されたインテントを処理する最初のアプリケーションを自動的に取得/選択するにはどうすればよいですか。

この例では、電子メールなどのデータを送信するアプリケーションから選択します。

final Intent emailIntent = new Intent(android.content.Intent.ACTION_SEND); SendEmailActivity.this.startActivity(Intent.createChooser(1, "Send mail..."));

助けてください。

4

2 に答える 2

5

この質問への回答を使用して、目的のあるすべてのアプリのリストを取得できますandroid.content.Intent.ACTION_SEND

以下にコーディングした実際の例を次に示します(デバイスでgmailを選択することになります)

**公正な警告 - 電子メール アカウントがセットアップされていない場合は NullPointerException をスローします。変数に null チェックを追加し、pkgAppsList電子メール アプリケーションが見つからないかセットアップされていないことをユーザーに通知する必要があります。

    //set the main intent to ACTION_SEND for looking for applications that share information
    Intent intent = new Intent(Intent.ACTION_SEND, null);

    //intent.addCategory(Intent.CATEGORY_LAUNCHER); //if you want extra filters

    //filter out apps that are able to send plain text
    intent.setType("plain/text");

    //get a list of apps that meet your criteria above
    List<ResolveInfo> pkgAppsList = this.getPackageManager().queryIntentActivities( intent, PackageManager.MATCH_DEFAULT_ONLY | PackageManager.GET_RESOLVED_FILTER);

    //select the first one in the list
    ResolveInfo info = pkgAppsList.get(0);      
    String packageName = info.activityInfo.packageName;
    String className = info.activityInfo.name;

    //set the intent to luanch that specific app
    intent.setClassName(packageName, className);

    //some samples on adding more then one email address
    String aEmailList[] = { "user@fakehost.com","user2@fakehost.com" };
    String aEmailCCList[] = { "user3@fakehost.com","user4@fakehost.com"};
    String aEmailBCCList[] = { "user5@fakehost.com" };

    //all the extras that will be passed to the email app       
    intent.putExtra(android.content.Intent.EXTRA_EMAIL, aEmailList);
    intent.putExtra(android.content.Intent.EXTRA_CC, aEmailCCList);
    intent.putExtra(android.content.Intent.EXTRA_BCC, aEmailBCCList);
    intent.putExtra(android.content.Intent.EXTRA_SUBJECT, "My subject");
    intent.putExtra(android.content.Intent.EXTRA_TEXT, "My message body.");

    //start the app
    startActivity(intent);

呼び出されているアプリをホワイトリストに登録する場合は、特定のパッケージの各パッケージ名をチェックするリストをループできます (例: gmail は「com.google.android.gm」)。

于 2012-09-06T01:32:33.657 に答える