android 接收短信功能此类用处不大,记录一下:
/**
* 监听数据库内容改变,根据具体的号码来删除短信
*/
private class SmsContent extends ContentObserver {
private Cursor cursor = null;
private Handler hand = null;
private String phoneNumber = null;
private int msgSuccess = 0;//响应的msg_id
private int msgFail = 0;//响应的msg_id
public SmsContent(final Handler handler, final int successCode, final int failCode, final String phone) {
super(handler);
// TODO Auto-generated constructor stub
hand = handler;
msgSuccess = successCode;
msgFail = failCode;
phoneNumber = phone;
Log.i(TAG, "HAITAG SmsContent msgSuccess = " + msgSuccess + " msgFail = " + msgFail + " phoneNumber = " + phoneNumber);
}
/* (non-Javadoc)
* @see android.database.ContentObserver#onChange(boolean)
*/
@Override
public void onChange(boolean selfChange) {
// TODO Auto-generated method stub
super.onChange(selfChange);
//数据库查询,具体各个字段的表示的含义下面有解释
cursor = managedQuery(Uri.parse("content://sms/inbox"),
new String[]{"_id", "address", "read"},
"address=? and read=?",
new String[]{phoneNumber, "0"},
"date desc");
if (cursor != null) {
ContentValues values = new ContentValues();
values.put("read", 1);
cursor.moveToFirst();
Log.i(TAG, "HAITAG SmsContent selfChange = " + selfChange + " cursor.toString = " + cursor.toString());
Log.i(TAG, "HAITAG SmsContent selfChange = " + selfChange + " cursor.getColumnNames = " + cursor.getColumnNames());
while (cursor.isLast()) {
getContentResolver().update(Uri.parse("content://sms/inbox"),
values,
"_id=?",
new String[]{"" + cursor.getInt(0)});
cursor.moveToNext();
}
hand.sendEmptyMessage(msgSuccess);
return;
}
Log.i(TAG, "HAITAG SmsContent.onChange error selfChange = " + selfChange);
hand.sendEmptyMessage(msgFail);
return;
}
}
使用处,发送完短信就调用拦截短信功能类,能拦截但是无法获取短信内容: joyPaySmsNeedOneBackB2
private static final int MSG_SMS_BACK_FAIL = 0;//发送扣费短信后未返回信息
private static final int MSG_SMS_BACK_1 = 1;//发送扣费短信后收到
private static final int MSG_SMS_BACK_2 = 2;
/**
* 有些短信付费需要二次确认
*
* @param phoneNumber
* @return
*/
private boolean joyPaySmsNeedOneBackB2(final String phoneNumber) {
//注册监听二次确认短信
Handler hand = new Handler() {
@Override
public void handleMessage(Message msg) {
Log.i(TAG, "HAITAG joyPaySmsNeedOneBackB2 handleMessage msg.what = " + msg.what);
switch (msg.what) {
case MSG_SMS_BACK_1:
break;
case MSG_SMS_BACK_2:
break;
case MSG_SMS_BACK_FAIL:
break;
default:
break;
}
}
};
Log.i(TAG, "HATAG joyPaySmsNeedOneBackB2 phoneNumber = " + phoneNumber);
SmsContent content = new SmsContent(hand, MSG_SMS_BACK_1, MSG_SMS_BACK_FAIL, phoneNumber);
DooyogamePaySelect.this.getContentResolver().registerContentObserver(Uri.parse("content://sms/"), true, content);
return true;
}
在androidmenifest.xml中添加权限:
<uses-permission android:name="android.permission.READ_PHONE_STATE"/>
<uses-permission android:name="android.permission.WRITE_SMS"/>
<uses-permission android:name="android.permission.READ_SMS"/>
<uses-permission android:name="android.permission.SEND_SMS"/>
<uses-permission android:name="android.permission.RECEIVE_SMS"/>