所需权限
<!-- 读取短信的权限 --> <uses-permission android:name="android.permission.READ_SMS"/>
布局Activity :
<?xml version="1.0" encoding="utf-8"?> <manifest xmlns:android="http://schemas.android.com/apk/res/android" package="com.qf.day16_contentresolver_sms_demo1" android:versionCode="1" android:versionName="1.0" > <uses-sdk android:minSdkVersion="8" android:targetSdkVersion="18" /> <!-- 读取短信的权限 --> <uses-permission android:name="android.permission.READ_SMS"/> <application android:allowBackup="true" android:icon="@drawable/ic_launcher" android:label="@string/app_name" android:theme="@style/AppTheme" > <activity android:name="com.qf.day16_contentresolver_sms_demo1.MainActivity" android:label="@string/app_name" > <intent-filter> <action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LAUNCHER" /> </intent-filter> </activity> </application> </manifest>
java代码(MainActivity)
package com.qf.day16_contentresolver_sms_demo1; import android.net.Uri; import android.os.Bundle; import android.annotation.SuppressLint; import android.app.Activity; import android.content.ContentResolver; import android.database.Cursor; import android.view.Menu; import android.widget.ListView; import android.widget.SimpleCursorAdapter; /** * 使用ContentResolver获取数据步骤: * 1,获取ContentResolver对象 * 2,使用ContentResolver 查询数据, 得到Uri对象 * 3,将数据展示到ListVIew * */ public class MainActivity extends Activity { //内容解析器 private ContentResolver contentResolver; //Uri 访问私有数据的路径 private Uri smsUri = Uri.parse("content://sms"); private ListView lv; private SimpleCursorAdapter adapter; @SuppressLint("NewApi") @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); lv = (ListView) findViewById(R.id.lv); //获取实例化对象 contentResolver = getContentResolver(); /** * 获取数据 通过Uri * * 参数1:访问ContentProvider 的路径 * 参数2:查询的字段项 null代表查询所有 * 参数3: 查询的条件 _id =? body = ? * 参数4: 查询条件的占位符 * 参数5: 排序 * SimpleCursorAdapter 必须要查找_id字段 哪怕你不使用 */ Cursor cursor = contentResolver.query(smsUri, null, null, null, null); adapter = new SimpleCursorAdapter(MainActivity.this, R.layout.item, cursor, new String[]{"address","body"}, new int[]{R.id.tv_address,R.id.tv_body}, SimpleCursorAdapter.FLAG_REGISTER_CONTENT_OBSERVER); lv.setAdapter(adapter); } }
layout下布局文件
activity_main.xml(Activity界面)<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" android:paddingBottom="@dimen/activity_vertical_margin" android:paddingLeft="@dimen/activity_horizontal_margin" android:paddingRight="@dimen/activity_horizontal_margin" android:paddingTop="@dimen/activity_vertical_margin" tools:context=".MainActivity" > <ListView android:id="@+id/lv" android:layout_width="match_parent" android:layout_height="match_parent" ></ListView> </RelativeLayout>
list填充的布局
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" android:paddingBottom="@dimen/activity_vertical_margin" android:paddingLeft="@dimen/activity_horizontal_margin" android:paddingRight="@dimen/activity_horizontal_margin" android:paddingTop="@dimen/activity_vertical_margin" tools:context=".MainActivity" > <ListView android:id="@+id/lv" android:layout_width="match_parent" android:layout_height="match_parent" ></ListView> </RelativeLayout>