3

私は次のコードを使用しています:

Intent sendMailIntent = new Intent(Intent.ACTION_SEND); 
        sendMailIntent.putExtra(Intent.EXTRA_SUBJECT, getString(R.string.Share_Mail_Subject));
        sendMailIntent.putExtra(Intent.EXTRA_TEXT, getString(R.string.Share_Mail_Text)); 
        sendMailIntent.setType("text/plain");

startActivity(Intent.createChooser(sendMailIntent, "Email / SMS / Tweet ?"));

次に、次の違いを生むことができるようにしたいと思います。1.ユーザーが実際に電子メール/SMSを送信した...または2.ユーザーが実際にバックボタンを押した...そして何も送信しなかった。

この違いを生む方法はありますか?

=> startActivityForResultを使用してアクティビティを起動する必要がありますか?onActivityResult..でrequestCode/resultCodeをキャッチします。

=> resultCodeのどの王を期待すべきですか?それを正しくつかむ方法は?これらのコード行はどこに置くべきですか?ここでは、コードのスニペットが非常に役立ちます。

前もって感謝します。

ハブ

4

1 に答える 1

1

この質問をしてからかなり時間が経ちましたが、この間に Android はかなり変化しました。あなたがまだ答えを探しているかどうかはわかりませんが、もしそうなら、3 番目の引数Intent.createChooser()を取る新しいメソッドと. 方法は次のとおりです。PendingIntent.getIntentSender()BroadcastReceiver

Intent sendMailIntent = new Intent(Intent.ACTION_SEND); 
sendMailIntent.putExtra(Intent.EXTRA_SUBJECT, getString(R.string.Share_Mail_Subject));
sendMailIntent.putExtra(Intent.EXTRA_TEXT, getString(R.string.Share_Mail_Text)); 
sendMailIntent.setType("text/plain");

Intent receiver = new Intent(this, BroadcastTest.class);
receiver.putExtra("test", "test");

PendingIntent pendingIntent = PendingIntent.getBroadcast(this, 0, receiver, PendingIntent.FLAG_UPDATE_CURRENT);
Intent chooser = Intent.createChooser(intent, "test", pendingIntent.getIntentSender());
startActivity(chooser);

receiver私の意図のターゲットは、BroadcastTest拡張するクラスであることに注意してくださいBroadcastReceiver。ユーザーがセレクターからアプリケーションを選択すると、onReceiveメソッドが呼び出されます。BroadcastTestユーザーが押し戻すと、メソッドは呼び出さonReceiveれません。このようにして、ユーザーが実際にメール/SMS/ツイートを送信したかどうか、または彼らが押し返したかどうかを確認できます。たとえば、これが私のBroadcastTestクラスの場合:

public class BroadcastTest extends BroadcastReceiver {
    @Override
    public void onReceive(Context context, Intent intent) {
        for (String key : intent.getExtras().keySet()) {
            Log.d(getClass().getSimpleName(), " " + intent.getExtras().get(key));
        }
    }
}

ComponentInfo{org.telegram.messenger/org.telegram.ui.LaunchActivity}ユーザーがアプリケーション Telegram を選択した場合、ログに次のようなものが表示されます。key を使用するandroid.intent.extra.CHOSEN_COMPONENTと、ユーザーが選択したものを見つけることができるはずです。BroadcastReceiverまた、マニフェストでを宣言することを忘れないでください。

別の方法は、独自のセレクターを使用PackageManagerして作成することです。queryIntentActivities()これにより、ユーザーの選択をプログラムで取得できます。このメソッドは、このStackOverflow の投稿で説明されています。

に関するあなたの質問に答えるために、Android の情報源から、 の中から選択するがまったくないstartActivityForResultことがわかります。したがって、結果コードを でキャッチしようとすると、常に 0 ( ) になります。したがって、 を使用すると、ユーザーがオプションを選択したのか、押し戻したのかを判断できません。ActivityIntentssetResult()onActivityResultRESULT_CANCELEDstartActivityForResult

于 2016-07-13T04:41:54.970 に答える