Android讀取簡訊(短信)(讀取SMS)[Android]
簡訊某些地方稱短信
英文稱SMS
權限
<uses-permission android:name="android.permission.RECEIVE_SMS" ></uses-permission>
<uses-permission android:name="android.permission.READ_SMS" >
</uses-permission>
1.服務監聽收到簡訊的事件
要注意的是解析內容的地方改這段
可以取得寄件者和信件內容
LOG QQQ那邊
@Override
public void onReceive(Context context, Intent intent) {
Bundle data = intent.getExtras();
Object[] pdus = new Object[0];
if (data != null) {
pdus = (Object[]) data.get("pdus"); // the pdus key will contain the newly received SMS
}
if (pdus != null) {
for (Object pdu : pdus) {
SmsMessage[] messages = new SmsMessage[pdus.length];
StringBuilder content = new StringBuilder();
for (int i = 0; i < pdus.length; i++) {
messages[i] = SmsMessage.createFromPdu((byte[])pdus[i]);
content.append(messages[i].getMessageBody());
}
String number = messages[0].getOriginatingAddress();
Log.e("QQQ","AA1:"+content);
Log.e("QQQ","AA2:"+number);
if (mListener!=null)
mListener.onOTPReceived("Extracted OTP");
break;
}
}
}
2.讀取所有的簡訊內容
要注意的是person的話有可能會得到空值,其他有些欄位也有機會得到空值
有用到的要加判斷不為空
//讀簡訊
private Uri SMS_INBOX = Uri.parse("content://sms/");
public void getSmsFromPhone() {
ContentResolver cr = getContentResolver();
String[] projection = new String[] { "body" , "address", "person", "date",};//"_id", "address", "person",, "date", "type
// String where = " address = '1066321332' AND date > "
// + (System.currentTimeMillis() - 10 * 60 * 1000);
// Cursor cur = cr.query(SMS_INBOX, projection, where, null, "date desc");
Cursor cur = cr.query(SMS_INBOX, projection,null , null, "date desc");
if (null == cur)
return;
while (cur.moveToNext()) {
String number = cur.getString(cur.getColumnIndex("address"));//手机号
// String name = cur.getString(cur.getColumnIndex("person"));//联系人姓名列表
String body = cur.getString(cur.getColumnIndex("body"));
Log.e("QQQ1",body);
// Log.e("QQQ2",name);
Log.e("QQQ3",number);
}
}
留言