Android受信とメール送信の実現コード
Androidはメールを受け取ると、Android.provider.Telephony.SMS_を放送します。RECEIVEDメッセージは、Receiverを定義すれば、このメッセージを聞くことができます。
<intent-filter android:privity=“100”>
このように、優先度が高いので、アプリケーションは、システムより先にandroid.provider.Telephony.SMS_を受信することになる。RECEIVEDメッセージ。
Javaファイル:
最後に、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メッセージは、メッセージの提示音、振動などを発信し、適用してメールを受信します。
以上が本文の全部です。皆さんの勉強に役に立つように、私たちを応援してください。
<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は各文字列です。以上が本文の全部です。皆さんの勉強に役に立つように、私たちを応援してください。