小米手机读取手机短信
2015-11-27 15:43
190 查看
由于小米的系统屏蔽了短信广播事件。通过广播事件读取短信的方法失败。
所以使用读取短信数据库的方法来读取短信
需要读取短信权限
<uses-permission android:name="android.permission.READ_SMS"/>
<uses-permission android:name="android.permission.SEND_SMS"/>
读取短信类
package com.heima.readsms;
import android.app.Activity;
import android.content.ContentValues;
import android.database.ContentObserver;
import android.database.Cursor;
import android.net.Uri;
import android.os.Handler;
import android.os.Message;
public class SMSContent extends ContentObserver {
private Cursor cursor = null;
private String last_id = "";
private Activity activity;
private Uri uri;
public SMSContent(Handler handler, Activity activity) {
super(handler);
// this.handler = handler;
this.activity = activity;
}
@Override
public void onChange(boolean selfChange) {
super.onChange(selfChange);
// 读取收件箱中指定号码的短信
cursor = activity.managedQuery(Uri.parse("content://sms/inbox"),
new String[] { "_id", "address", "read", "body" }, "read=?", new String[] { "0" }, "date desc");
if (cursor != null) {
if (cursor.moveToFirst()) {
String phone = cursor.getString(cursor.getColumnIndex("address"));
String body = cursor.getString(cursor.getColumnIndex("body"));
String _id = cursor.getString(cursor.getColumnIndex("_id"));
// 缓存上一次信息
if (!last_id.equals(_id)) {
System.out.println("1111未接短信---->" + "电话号码:" + phone + "内容:" + body);
last_id = _id;
System.out.println(_id);
ContentValues values = new ContentValues();
values.put("read", "1"); // 修改短信为已读模式
Message msg = handler.obtainMessage();
msg.what = 1;
msg.obj = phone;
this.handler.sendMessage(msg);
}
}
}
cursor.close();
}
// 处理接收的短信
Handler handler = new Handler() {
@Override
public void handleMessage(Message msg) {
switch (msg.what) {
case 1:
System.out.println("处理接收的短信" + msg.obj);
break;
default:
break;
}
}
};
}
使用方法:
package com.heima.readsms;
import android.app.Activity;
import android.net.Uri;
import android.os.Bundle;
import android.os.Handler;
public class MainActivity extends Activity {
private Handler handler;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
SMSContent smsContent = new SMSContent(handler, this);
// 注册短信变化监听
this.getContentResolver().registerContentObserver(Uri.parse("content://sms/"), true, smsContent);
}
}
所以使用读取短信数据库的方法来读取短信
需要读取短信权限
<uses-permission android:name="android.permission.READ_SMS"/>
<uses-permission android:name="android.permission.SEND_SMS"/>
读取短信类
package com.heima.readsms;
import android.app.Activity;
import android.content.ContentValues;
import android.database.ContentObserver;
import android.database.Cursor;
import android.net.Uri;
import android.os.Handler;
import android.os.Message;
public class SMSContent extends ContentObserver {
private Cursor cursor = null;
private String last_id = "";
private Activity activity;
private Uri uri;
public SMSContent(Handler handler, Activity activity) {
super(handler);
// this.handler = handler;
this.activity = activity;
}
@Override
public void onChange(boolean selfChange) {
super.onChange(selfChange);
// 读取收件箱中指定号码的短信
cursor = activity.managedQuery(Uri.parse("content://sms/inbox"),
new String[] { "_id", "address", "read", "body" }, "read=?", new String[] { "0" }, "date desc");
if (cursor != null) {
if (cursor.moveToFirst()) {
String phone = cursor.getString(cursor.getColumnIndex("address"));
String body = cursor.getString(cursor.getColumnIndex("body"));
String _id = cursor.getString(cursor.getColumnIndex("_id"));
// 缓存上一次信息
if (!last_id.equals(_id)) {
System.out.println("1111未接短信---->" + "电话号码:" + phone + "内容:" + body);
last_id = _id;
System.out.println(_id);
ContentValues values = new ContentValues();
values.put("read", "1"); // 修改短信为已读模式
Message msg = handler.obtainMessage();
msg.what = 1;
msg.obj = phone;
this.handler.sendMessage(msg);
}
}
}
cursor.close();
}
// 处理接收的短信
Handler handler = new Handler() {
@Override
public void handleMessage(Message msg) {
switch (msg.what) {
case 1:
System.out.println("处理接收的短信" + msg.obj);
break;
default:
break;
}
}
};
}
使用方法:
package com.heima.readsms;
import android.app.Activity;
import android.net.Uri;
import android.os.Bundle;
import android.os.Handler;
public class MainActivity extends Activity {
private Handler handler;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
SMSContent smsContent = new SMSContent(handler, this);
// 注册短信变化监听
this.getContentResolver().registerContentObserver(Uri.parse("content://sms/"), true, smsContent);
}
}
相关文章推荐
- java中form以post、get方式提交数据中文乱码问题总结
- gvim 命令补充
- 复习URLHttpConnection方式GET,POST方式链接网络解析uri
- maven命令大全
- windows 64bit selenium+python环境搭建
- 算法—排序算法总结
- Mysql联合,连接查询
- 解决iptables和vsftpd设置的问题
- params可变参数
- 详解基于Bootstrap扁平化的后台框架Ace
- 阿里云服务器之hexo环境搭建
- windows、liunx 下获取mac地址
- UVa 10635 - Prince and Princess(DP)
- tomcat性能调整,稳定一定访问量(转载)
- webApp用户体验优化——quickClick
- mysql添加slave节点
- mysql在线修改表结构大数据表的风险与解决办法归纳
- 仿美团app,浮动layout滑动到顶部悬停效果
- CCActionEase(3)
- C++设计模式[二十二]模板方法模式