10.メールを送る

4100 ワード

10.1問題
アプリケーションはメールを外部に送信する必要があります.
10.2ソリューション
(API Level 4)SMSManagerを使用して文字またはデータのショートメッセージを送信します.SMSManagerは、ショートメッセージの送信を処理し、操作のステータスをアプリケーションにフィードバックするシステムサービスです.SMSMSManagerは、SmsManager.sendTextMessage()およびSmsManagerを提供します.sendMultipartTextMessage()メソッドは、文字メッセージを送信し、SmsManagerを提供する.sendDataMessage()メソッドでデータメールを送信します.これらの方法には、送信動作状態を伝達し、メッセージを要求ターゲットに返信するためのPendingIntentパラメータが含まれている.
10.3実現メカニズム
メッセージを送信してステータスを監視する簡単な例を次に示します(以下のコードリストを参照).メッセージを送信するActivity
public class SmsActivity extends Activity {
    //          (    、    )
    private static final String RECIPIENT_ADDRESS = "";

    /* Custom Action Strings for Result Delivery */
    private static final String ACTION_SENT =
            "com.examples.sms.SENT";
    private static final String ACTION_DELIVERED =
            "com.examples.sms.DELIVERED";

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

        Button sendButton = new Button(this);
        sendButton.setText("Hail the Mothership");
        sendButton.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                sendSMS("Beam us up!");
            }
        });

        setContentView(sendButton);
    }

    @Override
    protected void onResume() {
        super.onResume();
        //       
        registerReceiver(sent, new IntentFilter(ACTION_SENT));
        registerReceiver(delivered, new IntentFilter(ACTION_DELIVERED));
    }

    @Override
    protected void onPause() {
        super.onPause();
        //               
        unregisterReceiver(sent);
        unregisterReceiver(delivered);
    }

    private void sendSMS(String message) {
        //Construct a PendingIntent to fire on SMS sent
        PendingIntent sIntent = PendingIntent.getBroadcast(
            this, 0, new Intent(ACTION_SENT), 0);
        //Construct a PendingIntent to fire on SMS delivery confirmation
        PendingIntent dIntent = PendingIntent.getBroadcast(
            this, 0, new Intent(ACTION_DELIVERED), 0);

         //    
        SmsManager manager = SmsManager.getDefault();
        manager.sendTextMessage(RECIPIENT_ADDRESS, null, message,
                sIntent, dIntent);
    }

    /*
     * BroadcastReceiver that is registered to receive events when
     * an SMS message is sent; with the result code.
     */
    private BroadcastReceiver sent = new BroadcastReceiver(){
        @Override
        public void onReceive(Context context, Intent intent) {
            switch (getResultCode()) {
            case Activity.RESULT_OK:
                //    
                break;
            case SmsManager.RESULT_ERROR_GENERIC_FAILURE:
            case SmsManager.RESULT_ERROR_NO_SERVICE:
            case SmsManager.RESULT_ERROR_NULL_PDU:
            case SmsManager.RESULT_ERROR_RADIO_OFF:
                //    
                break;
            }
        }
    };

    /*
     * BroadcastReceiver that is registered to receive events when
     * an SMS delivery confirmation is received; with the result code.
     */
    private BroadcastReceiver delivered = new BroadcastReceiver(){
        @Override
        public void onReceive(Context context, Intent intent) {
            switch (getResultCode()) {
            case Activity.RESULT_OK:
                //    
                break;
            case Activity.RESULT_CANCELED:
                //    
                break;
            }
        }
    };
}

要点:メールを送るにはリストにandroidを宣言する必要があります.permission.SEND_SMS権限.
この例では、ユーザがボタンをクリックすると、SMSManagerを介してメールが送信される.SMSManagerはシステムサービスであるため、静的メソッドSMSManagerを呼び出す必要がある.getDefault()は、その参照を取得します.sendTextMessage()メソッドのパラメータが宛先アドレス(番号)、サービスセンターアドレスおよびメールの内容.SMSManagerにシステムのデフォルトのサービスセンターアドレスを使用させるには、このパラメータをnullに設定する必要があります.ここには、送信するコールバックIntent:1つの送信操作のステータス、もう1つの送信状態を受信するための2つのBroadcastReceiverが登録されています.これらの受信機は、操作が送信待ち状態にある場合にのみ使用されます.登録され、Intentの処理が完了するとすぐに登録がキャンセルされます.