是不是导错包了,smsmanger应该导入
android.telephony.SmsManager;它本身用不到访问网络的东西。也不需要开线程的。
应该是访问内容提供者是使用的Uri:content://zfl.com.sms.provider.Smscontentprovider/sms有错误,要么是字符串拼接错误,是匹配时没有成功导致的。
下载SQLite Expert 并安装,然后从Android Studio 的DDMS中找到数据库,导出,用Expert查看即可。
可能是你的权限没有获取到
整数,字符串。 二进制数据(图片,所有数据类型),可以这么理解。
多写一个openhelper,数据库名字相同, 表名不同
在代码里注册了 , 创建匿名内部类广播接收者的时候就是注册
getActivity() 相当于this 或者 Activity.this,是获取当前Activity的实例,生命周期随当前的Activity销毁而销毁;
getContext() 获取当前congtext的实例(如果使用场景是Activity则相当于 this, 如果使用场景是一个Server 那么获取的实例就是一个ApplicationContext())
代码没打对。
数据库不是有名字吗,回调方法里接受收到信息的联系人相关信息。。
不明觉厉,要多学学了
1、确认是否写入了数据库,可以通过命令行看
2、数据写入数据库了,没有显示出来(也是我遇到的问题),原因是SmsProvider中的query写错了,正确的应该是:
@Nullable @Override public Cursor query(Uri uri, String[] projection, String selection, String[] selectionArgs, String sortOrder) { int match = matcher.match(uri); switch (match) { case SMS_ALL: break; case SMS_ONE: long id = ContentUris.parseId(uri); selection = "_id=?"; selectionArgs = new String[]{String.valueOf(id)}; break; default: throw new RSIllegalArgumentException("Wrong URI:" + uri); } mDb = mHelper.getReadableDatabase(); Cursor cursor = mDb.query(SendedMsg.TABLE_NAME, projection, selection, selectionArgs, null, null, sortOrder); cursor.setNotificationUri(getContext().getContentResolver(), URI_SMS_ALL); //cursor.close(); return cursor; }
注意最后两行代码
当然可以,不过支持依赖包的配置需要配置完整,包括support -v4 包 ,design包 等等,导包需注意
这个是手机应用的权限没有,你要在手机里设置你写的Dmeo可以访问通讯录
代码可以实现的
1、确认是否写入了数据库,可以通过命令行看
2、数据写入数据库了,没有显示出来(也是我遇到的问题),原因是SmsProvider中的query写错了,正确的应该是:
@Nullable @Override public Cursor query(Uri uri, String[] projection, String selection, String[] selectionArgs, String sortOrder) { int match = matcher.match(uri); switch (match) { case SMS_ALL: break; case SMS_ONE: long id = ContentUris.parseId(uri); selection = "_id=?"; selectionArgs = new String[]{String.valueOf(id)}; break; default: throw new RSIllegalArgumentException("Wrong URI:" + uri); } mDb = mHelper.getReadableDatabase(); Cursor cursor = mDb.query(SendedMsg.TABLE_NAME, projection, selection, selectionArgs, null, null, sortOrder); cursor.setNotificationUri(getContext().getContentResolver(), URI_SMS_ALL); //cursor.close(); return cursor; }
注意最后两行代码
ContentProvider的Uri,通过自定义的SmsProvider获取Cursor
你是不是没有设置SmsHistoryFragment的适配器,在setupListAdapter();方法后调用setListAdapter(mCursorAdapter); 就行了
Android 操作SQLite基本用法
http://blog.csdn.net/codeeer/article/details/30237597
鸿洋老师,一直是做javaee的
要学会自己敲,加深印象
你每条记录都是一个数据bean吧,从bean里提取出id呗,前提是你之前存记录的时候也把id存了