7

メソッドを使用して動作を選択する方法はありますIntent.createChooserか? たとえば、選択した場合 (最初のオプション)、電子メールで送信したい画像があります。そして、2番目のオプションでは、この画像のリンクを送信したいと思いますsms(そのためには、複雑なアクションが必要になります-画像をサーバーにアップロードし、ダウンロードリンクを取得しますsmssms)

2 番目のタスクを達成するにはどうすればよいでしょうか。

次のような画像付きの電子メールを送信できると思います。

Intent emailIntent = new Intent(android.content.Intent.ACTION_SEND); 
emailIntent.setType("application/image");
emailIntent.putExtra(android.content.Intent.EXTRA_EMAIL, new String[]{textMail}); 
emailIntent.putExtra(android.content.Intent.EXTRA_SUBJECT,"Some Subj"); 
emailIntent.putExtra(android.content.Intent.EXTRA_TEXT, "Some Extra Text"); 
emailIntent.putExtra(Intent.EXTRA_STREAM, Uri.parse(fileUri));
startActivity(Intent.createChooser(emailIntent, "Send mail..."));

UPD:smsインテント チューザーで選択された場合、本当に必要なのはユーザーのクリックを傍受することであることに気付きました。では、問題はそれをどのように達成できるかということです。

4

3 に答える 3

10

1)共有や送信操作を行うインテントを作成し、

Intent email = new Intent(Intent.ACTION_SEND);
email.putExtra(Intent.EXTRA_EMAIL, new String[]{"velmurugan@androidtoppers.com"});
email.putExtra(Intent.EXTRA_SUBJECT, "Hi");
email.putExtra(Intent.EXTRA_TEXT, "Hi,This is Test");

email.setType("text/plain");

2) AlertDialog を作成して、AlertDialog にアプリケーションを設定します。

final Dialog dialog = new Dialog(Custom_chooser.this);
dialog.requestWindowFeature(Window.FEATURE_NO_TITLE);
WindowManager.LayoutParams WMLP = dialog.getWindow().getAttributes();
WMLP.gravity = Gravity.CENTER;
dialog.getWindow().setAttributes(WMLP);
dialog.getWindow().setBackgroundDrawable(
new ColorDrawable(android.graphics.Color.TRANSPARENT));
dialog.setCanceledOnTouchOutside(true);
dialog.setContentView(R.layout.about_dialog);
dialog.show();

3) ResolveInfo を使用して、特定のインテントに関連するアプリケーションのリストを取得する

List<ResolveInfo> launchables=pm.queryIntentActivities(email, 0);
Collections.sort(launchables,newResolveInfo.DisplayNameComparator(pm));

4))アプリケーションのリストをカスタムリストビューに設定します。

adapter=new AppAdapter(pm, launchables);
lv.setAdapter(adapter);

5) 最後に、リストビューのアプリケーションのリストからアプリケーションを選択すると、特定のアプリケーションを起動します。

ResolveInfo launchable=adapter.getItem(position);
ActivityInfo activity=launchable.activityInfo;
ComponentName name=new ComponentName(activity.applicationInfo.packageName,
activity.name);
email.addCategory(Intent.CATEGORY_LAUNCHER);
email.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK |
Intent.FLAG_ACTIVITY_RESET_TASK_IF_NEEDED);
email.setComponent(name);
startActivity(email);

詳細については、このリンクを参照してください: http://velmuruganandroidcoding.blogspot.in/2014/01/custom-chooser-android-in-example.html

于 2014-08-09T09:33:25.500 に答える
1

私が望んでいたように正確に達成することはできないようです。

考えられる方法は、PackageManager クラスで queryIntentActivities() を使用してカスタム アプリ チューザーを構築することです。役立つ投稿:インストールされている Android パッケージ名に基づくインテント チューザーのカスタム フィルタリング

別の可能な方法は、カスタム ポップアップを作成することです - http://developer.android.com/guide/topics/ui/menus.html#PopupMenu
またはフローティング コンテキスト メニュー -
http://developer.android.com/guide/topics /ui/menus.html#FloatingContextMenu

顧客が実際に望んでいたのは、いくつかのカスタムだけだったようDialogです。このようなもの:

public Dialog onCreateDialog(Bundle savedInstanceState) {
    AlertDialog.Builder builder = new AlertDialog.Builder(this);
    builder.setTitle("E-mail / MMS").setItems(R.array.send_array, new DialogInterface.OnClickListener() {
        public void onClick(DialogInterface dialog, int which) {
            // The 'which' argument contains the index position
            // of the selected item
        }
    });
    return builder.create();
}
于 2013-10-11T11:36:26.490 に答える
0

選択した回答に加えて。
Facebook は共有とうまく連携しないため、Facebook のコントロールを追加することもできます。

if (activity.applicationInfo.packageName.toLowerCase().contains("facebook")) {
                    //Share on Facebook
                    ShareLinkContent content = new ShareLinkContent.Builder().
                            setContentUrl(Uri.parse(mLink)).
                            setImageUrl(Uri.parse(mImageURL)).
                                    setContentTitle(mTitle).
                                    setContentDescription(mDescription)
                            .build();
                    com.facebook.share.widget.ShareDialog.show(mActivity, content);
                } else {
                    //Share on selected application
                    ComponentName name = new ComponentName(activity.applicationInfo.packageName,
                            activity.name);
                    shareIntent.addCategory(Intent.CATEGORY_LAUNCHER);
                    shareIntent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK |
                            Intent.FLAG_ACTIVITY_RESET_TASK_IF_NEEDED);
                    shareIntent.setComponent(name);
                    mActivity.startActivity(shareIntent);
                }
于 2015-12-02T09:08:25.930 に答える