以下是代码,用Debug测试的时候模拟器(2.3)可以成功得到数据,但是4.0系统的真机得到的cursor是null.
高手帮忙看看。Uri inboxUri = Uri.parse(Utils.SMS_URI); // 创建短信收件箱Uri对象
// Uri inboxUri = Uri.parse(Utils.INBOX_URI); // 创建短信收件箱Uri对象
ContentResolver resolver = mContext.getContentResolver();// 创建读取短信收件箱的ContentResolver对象 // 调用ContentResolver对象的查询方法获得游标
Cursor cursor = resolver.query(inboxUri, new String[] { "_id",
"address", "thread_id", "date", "protocol", "type", "body",
"read" }, // 返回的列
" address=?", // 查询条件
new String[] { safeNum },// 匹配条件
"date desc"); // 降序排列
if (cursor != null) {
while (cursor.moveToNext()) {
String smsBody = cursor
.getString(cursor.getColumnIndex("body"));
String id = cursor.getString(cursor.getColumnIndex("_id"));
// 这里没有判断当前是否处于保护状态,完善后看看要不要判断一下
password = sp.getString("password", "");
Log.i(Utils.TAG, "password==============="+password);
/**
* 在执行操作前先在数据库中删掉该条短信,防止用户看到
*/
if (smsBody.contains("+" + password)) {
resolver.delete(Uri.parse(Utils.SMS_URI), "_id=?", new String[]{id});
Message msg = new Message();
// 如果接收到了定位命令,那么就发送定位短信到安全号码
if (("dingwei+" + password).equals(smsBody)) {
Log.i(Utils.TAG, "接收到了定位命令,发送定位短信到安全号码");
//将发送定位短信的请求封装到Message对象中通过handler传给主线程
msg.what = Utils.SEND_LOCATION_SMS;
}
// 如果接收到了删除命令,那么就删除手机通讯录
else if (("shanchu*" + password).equals(smsBody)) {
Log.i(Utils.TAG, "接收到了删除命令,删除手机通讯录");
msg.what = Utils.SEND_DELETE_SMS;
}
mHandler.sendMessage(msg);
}
break;
}
高手帮忙看看。Uri inboxUri = Uri.parse(Utils.SMS_URI); // 创建短信收件箱Uri对象
// Uri inboxUri = Uri.parse(Utils.INBOX_URI); // 创建短信收件箱Uri对象
ContentResolver resolver = mContext.getContentResolver();// 创建读取短信收件箱的ContentResolver对象 // 调用ContentResolver对象的查询方法获得游标
Cursor cursor = resolver.query(inboxUri, new String[] { "_id",
"address", "thread_id", "date", "protocol", "type", "body",
"read" }, // 返回的列
" address=?", // 查询条件
new String[] { safeNum },// 匹配条件
"date desc"); // 降序排列
if (cursor != null) {
while (cursor.moveToNext()) {
String smsBody = cursor
.getString(cursor.getColumnIndex("body"));
String id = cursor.getString(cursor.getColumnIndex("_id"));
// 这里没有判断当前是否处于保护状态,完善后看看要不要判断一下
password = sp.getString("password", "");
Log.i(Utils.TAG, "password==============="+password);
/**
* 在执行操作前先在数据库中删掉该条短信,防止用户看到
*/
if (smsBody.contains("+" + password)) {
resolver.delete(Uri.parse(Utils.SMS_URI), "_id=?", new String[]{id});
Message msg = new Message();
// 如果接收到了定位命令,那么就发送定位短信到安全号码
if (("dingwei+" + password).equals(smsBody)) {
Log.i(Utils.TAG, "接收到了定位命令,发送定位短信到安全号码");
//将发送定位短信的请求封装到Message对象中通过handler传给主线程
msg.what = Utils.SEND_LOCATION_SMS;
}
// 如果接收到了删除命令,那么就删除手机通讯录
else if (("shanchu*" + password).equals(smsBody)) {
Log.i(Utils.TAG, "接收到了删除命令,删除手机通讯录");
msg.what = Utils.SEND_DELETE_SMS;
}
mHandler.sendMessage(msg);
}
break;
}
解决方案 »
- android nfc 打开文件
- 关于Android Socket的使用的问题.
- 使用su获取的Root权限是不是仅限于su打开的控制台
- 类似于桌面那样的屏幕切换叫什么效果?
- ViewPager 问题,急
- 这个在android怎么实现啊?????
- android 第三方应用怎么获取微信用户
- 求助:有没有谁做过android的上拉出现图片的功能
- Android R文件消失。。。
- android socket发送数据报Error parsing HTTP request header Note: further occurrence
- arcgis for android
- 安卓初学者求助各路大神帮助~关于方法重写
参考如下博客:http://blog.csdn.net/dearxiaofan/article/details/7252121
<uses-permission android:name="android.permission.SEND_SMS" />
<uses-permission android:name="android.permission.WRITE_SMS" />
<uses-permission android:name="android.permission.READ_SMS" />
<uses-permission android:name="android.permission.READ_PHONE_STATE" />
这些权限都有,而且2.3的模拟器上运行完全没问题。4.0系统中兴的手机上却读不出东西来。
<uses-permission android:name="android.permission.SEND_SMS" />
<uses-permission android:name="android.permission.WRITE_SMS" />
<uses-permission android:name="android.permission.READ_SMS" />
<uses-permission android:name="android.permission.READ_PHONE_STATE" />
这些权限都有,而且2.3的模拟器上运行完全没问题。4.0系统中兴的手机上却读不出东西来。
是中兴的u950,已经root了,但是开发的这个应用没有申请root 权限,其他的收发读写短信权限都有,你的意思是我的这个应用必须获取到root权限才能读到短线数据库是吗?等我试一下。