Androidの来短信监听详解
2015-01-08 16:13
253 查看
Androidの来短信监听方法详解
1. 来电短信监听内容,需要权限<uses-permission android:name="android.permission.RECEIVE_SMS" ></uses-permission>
<uses-permission android:name="android.permission.READ_SMS" ></uses-permission>
2.
通过广播监听短信内容
(注意:这种方式只对新收到的短消息有效,才能接受到广播)
先注册一个广播
<receiver android:name=".MainActivity$SmsReciver" >
<intent-filter android:priority="999">
<action android:name="android.provider.Telephony.SMS_RECEIVED" />
</intent-filter>
</receiver>
然后接受来短信广播代码
public class SmsRecivers extends BroadcastReceiver { @Override public void onReceive(Context context, Intent intent) { Bundle bundle = intent.getExtras(); SmsMessage msg = null; if (null != bundle) { Object[] smsObj = (Object[]) bundle.get("pdus"); for (Object object : smsObj) { msg = SmsMessage.createFromPdu((byte[]) object); Date date = new Date(msg.getTimestampMillis());// 时间 SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); String receiveTime = format.format(date); System.out.println("blueberry_number:"+ msg.getOriginatingAddress() + " body:" + msg.getDisplayMessageBody() + " time:"+ msg.getTimestampMillis()); // 在这里写自己的逻辑 if (msg.getOriginatingAddress().equals("10086")) { // TODO } } } } }
如果定义广播类定义在主类activity或者是在service中时候,即内部类,有时候出现异常问题,
Caused by: java.lang.InstantiationException: can't instantiate class com.example.smsreceivedemo.MainActivity$SmsReciver; no empty constructor
原因没有构造方法,或者定义该内部类时候,定义为 静态static 状态。即可解决。
系统的这个广播是有序广播,就是当别的程序先获取到了这个广播再传递给你,当然它也可以干掉这个广播,让你接收不到,这样你的程序肯定是接收不到这个广播的了。我们发现,通过设置priority的数值,其实有时是不管用的,现在在一些定制的系统或是有安全软件的情况下,往往短消息都被截取到,并被干掉。
3. 通过监听数据库获取短信内容
(注意:这种方式可以获取手机上所有的短信,包括已读未读的短信,但是也可以只监听来短信情况)
package com.example.smsreceivedemo; import java.util.regex.Matcher; import java.util.regex.Pattern; import android.app.Activity; import android.content.ContentResolver; import android.content.Context; import android.content.Intent; import android.database.ContentObserver; import android.database.Cursor; import android.net.Uri; import android.os.Bundle; import android.os.Handler; public class MainActivity extends Activity { private SmsObserver smsObserver; private Uri SMS_INBOX = Uri.parse("content://sms"); @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.fragment_main); smsObserver = new SmsObserver(this, smsHandler); getContentResolver().registerContentObserver(SMS_INBOX, true,smsObserver); } @Override protected void onDestroy() { super.onDestroy(); this.getContentResolver().unregisterContentObserver(smsObserver); } public Handler smsHandler = new Handler() { // 这里可以进行回调的操作 }; public MainActivity() { super(); } public void getSmsFromPhone() { ContentResolver cr = getContentResolver(); String[] projection = new String[] { "body", "address", "person" };// "_id", String where ="read = ?"; Cursor cur = cr.query(Uri.parse("content://sms/inbox"), projection, where, new String[] { "0" }, "date desc"); try { if (null == cur) return; if (cur.moveToNext()) { String number = cur.getString(cur.getColumnIndex("address"));// 手机号 String name = cur.getString(cur.getColumnIndex("person"));// 联系人姓名列表 String body = cur.getString(cur.getColumnIndex("body")); System.out.println("blueberry_number=" + number + " " + name+ " " + body + " "); } } catch (Exception e) { e.printStackTrace(); } finally { cur.close(); } } class SmsObserver extends ContentObserver { public SmsObserver(Context context, Handler handler) { super(handler); } @Override public void onChange(boolean selfChange) { super.onChange(selfChange); // 每当有新短信到来时,使用我们获取短消息的方法 getSmsFromPhone(); } } }这里监听数据库中短信变化,获取来短信信息,通多调用
onchange()方法,查询数据库,但是验证中调用了两次。所以需要进行处理,才能获取一次信息。
4. 源代码
android来短信广播监听
更多源码
/article/8268226.html
相关文章推荐
- android广播和短信广播详解----使用广播接收者监听短信
- 详解Android短信的发送和广播接收实现短信的监听
- Android上监听收到的短信(SMS)
- Android手机上监听短信的两种方式
- Android使用ContentObserver监听数据库变化,截取系统通知用户接收到短信
- Android监听SMS发送状态并获取短信服务中心号码
- Android发送短信以及监听发送状态
- Android上监听收到的短信(SMS)
- android广播监听短信并显示内容
- android短信监听
- Android手机上监听短信的两种方式
- android实现短信监听
- android监听短信
- Android手机上监听短信的两种方式
- (转)android如何监听发送短信
- Android手机上监听短信的两种方式
- 在Android中发送短信和彩信,监听短信并显示
- android广播监听短信并显示内容
- 【转】Android手机上监听短信的两种方式
- android广播和短信广播详解----使用广播接收者窃听短信