Android受信とメール送信の実現コード


Androidはメールを受け取ると、Android.provider.Telephony.SMS_を放送します。RECEIVEDメッセージは、Receiverを定義すれば、このメッセージを聞くことができます。

<receiver android:name=".smsReceiver" > 

  <intent-filter> 

    <action android:name="android.provider.Telephony.SMS_RECEIVED" /> 

  </intent-filter> 

</receiver>

intent-filterに優先度を追加することもできます。 
<intent-filter android:privity=“100”>
このように、優先度が高いので、アプリケーションは、システムより先にandroid.provider.Telephony.SMS_を受信することになる。RECEIVEDメッセージ。
Javaファイル: 

package com.hzhi.smsReceiver;
 

import java.text.SimpleDateFormat;
import java.util.Date; 
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.os.Bundle;
import android.telephony.SmsMessage;
import android.util.Log;
 

public class smsReceiver extends BroadcastReceiver { 
  @Override
  public void onReceive(Context context, Intent intent) { 
     //     
   StringBuilder strBody = new StringBuilder();
     //     
   String strTime = new String();
     //      
   StringBuilder number = new StringBuilder();
   SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd hh:mm:ss"); 
   Bundle bundle = intent.getExtras(); 
   if (bundle != null) { 
     Object[] _pdus = (Object[]) bundle.get("pdus"); 
     SmsMessage[] message = new SmsMessage[_pdus.length]; 

     for (int i = 0; i < _pdus.length; i++) { 

       message[i] = SmsMessage.createFromPdu((byte[]) _pdus[i]);
     } 
     for (SmsMessage currentMessage : message) { 
      strBody.append(currentMessage.getDisplayMessageBody()); 
       number.append(currentMessage.getDisplayOriginatingAddress()); 
       strTime = formatter.format(new Date(currentMessage.getTimestampMillis()));

     }
     String smsBody = strBody.toString(); 
     String smsNumber = number.toString(); 
     Log.v("NUMBER=", smsNumber);
     Log.v("TIME=", strTime); 
     Log.v("BODY=", smsBody); 

     //     

     this.abortBroadcast();

    }

  }   

}

メッセージを受信すると、Intent.getExtras()方法でIntentのExtratsを取得し、Bunndle.get(pdus)を利用してショートメッセージ配列を得る。なぜショートメッセージ配列ですか?これはメールの内容が長いので、配列が必要です。配列の各要素に対して、それぞれメールの内容、ショートメッセージのソース番号、ショートメッセージの時間を取り出します。その中で、これらの元素のショートメッセージの出所番号とショートメッセージの時間は同じで、ショートメッセージの内容は異なっていて、つなぎ合わせなければならなくて、1本の完備しているショートメッセージの内容を構成します。 
最後に、this.abort Broadcast()はandroid.provider.Telephony.SMSをキャンセルします。RECEIVEDメッセージ。intent-filterの優先度が高い場合、アプリケーションは、システムより先にandroid.provider.Telephony.SMS_を受信する。RECEIVEDメッセージを後で破棄します。このようにシステムはandroid.provider.Telephony.SMS_を受信しません。RECEIVEDメッセージは、メッセージの提示音、振動なども送られません。優先度が設定されていない場合、システムはまずAndroid.provider.Telephony.SMS_を受信します。RECEIVEDメッセージは、メッセージの提示音、振動などを発信し、適用してメールを受信します。

//     
public void sendMsg(){
  String content = edtSend.getText().toString();
  SmsManager smsManager = SmsManager.getDefault();
  List<String> divideContents = smsManager.divideMessage(content);
  for (String text : divideContents) {  
    smsManager.sendTextMessage(smsWidget.str_number, null, text, null, null);  
  }

}

まずSmsManagerの例を取得します。メールの内容をdivideMessageでいくつかの部分に分割します。これは、メールの内容が長すぎると、許容された最大の長さを超える可能性があります。この場合、メールの内容をいくつかの文字列に区分しなければなりません。一般的には、内容が最大の長さを超えないので、文字列です。最後に、すべての文字列に対して、sendTextMessage()方法を使って送信します。ここでsms Widget.strnumberは相手の番号で、textは各文字列です。
以上が本文の全部です。皆さんの勉強に役に立つように、私たちを応援してください。