1.
在manifest.xml加入短信发送,接收的权限
<uses-permission android:name="android.permission.SEND_SMS" /> <uses-permission android:name="android.permission.RECEIVE_SMS"/> <uses-permission android:name="android.permission.READ_SMS"/>
2.
在程序中接收短信广播。import android.app.Activity;
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.content.IntentFilter;
import android.os.Bundle;
import android.telephony.SmsMessage;
import android.util.Log;
import android.widget.TextView;
import android.widget.Toast;
public class Test0805Activity extends Activity {
/** Called when the activity is first created. */
private StringBuffer sb;
private TextView text;
private static final String ACTION = "android.provider.Telephony.SMS_RECEIVED";
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
text = (TextView) findViewById(R.id.text);
//注册监听器
IntentFilter filter = new IntentFilter();
filter.addAction("android.provider.Telephony.SMS_RECEIVED");
filter.setPriority(Integer.MAX_VALUE);
this.registerReceiver(receiver, filter);
}
public BroadcastReceiver receiver = new BroadcastReceiver() {
@Override
public void onReceive(Context context, Intent intent) {
// TODO Auto-generated method stub
Log.i("msg", intent.getAction());
if (intent != null && intent.getAction() != null
&& ACTION.compareToIgnoreCase(intent.getAction()) == 0) {
//提取短信内容
Object[] pduArray = (Object[]) intent.getExtras().get("pdus");
SmsMessage[] messages = new SmsMessage[pduArray.length];
sb = new StringBuffer(5000);
for (int i = 0; i < pduArray.length; i++) {
messages[i] = SmsMessage.createFromPdu((byte[]) pduArray[i]);
Log.i("sms1", messages[i].getOriginatingAddress());
Log.i("sms1", messages[i].getMessageBody());
sb.append(messages[i].getMessageBody());
Toast.makeText(context, messages[i].toString(), Toast.LENGTH_SHORT).show();
}
Log.i("sms1", "sms message received");
Log.i("msg", sb.toString());
getMessage(sb.toString());
}
}
};
@Override
protected void onDestroy() {
super.onDestroy();
unregisterReceiver(receiver);
}
}
可以调用intent.getExtras().get("pdus")提取出SmsMessage.此调用返回一个PDU模式中定义的对象数组,PDU是一种表示SMS小小的行业标准方式。然后可以讲PDU转换为android SmsMessage对象,代码如onReceive()所示。可以看到,以对象数组的形式从intent获取PDU,然后构造SmsMessage对象数组,其大小和PDU数组大小相等。最后,对PDU数组进行迭代,调用SmsMessage.createFromPdu((byte[]) pduArray[i])来从PDU创建SmsMessage对象。