1. 创建一个带listView 的 activity
2. 为listView设置Adapter
3. 采用AsyncQueryHandler 子类处理。
public ReadSms extends Activity
{
private ListView listView ;
private ReadSmsHandler smsHandler ; //ReadSmsHandler 为AsyncQueryHandler 的子类
private SmsAdapter adapter ; //SmsAdapter 为 CursorAdapter的子类
protected void onCreate(Bundle savedInstanceStat)
{
super.onCreate(savedInstanceStat) ;
smsHandler = new ReadSmsmHandler(getContentResolver());
smsHandler.cancelOperation();
smsHandler.startQuery(); //开始查询 查询完之后 会执行smsHandler的 onQueryComplete方法。
///startQuery(token, cookie, uri, projection, selection, selectionArgs, orderBy);
通过改变startQuery 中的参数 。来读取不同的内容。比如短信
uri 则为Uri.parse("content://mms-sms/conversations?simple=true")
读取联系人uri则为Phone.CONTENT_URI
}
class ReadSmsHandler
{
public ReadSmsHandler(ContentResolver cr)
{
super(cr);
}
@Override
protected void onQueryComplete(int token, Object cookie, Cursor cursor)
{
if(adapter == null)
{
//创建adapter
adapter = new SmsAdapter();
listView.setAdapter(adapter) ;
}
else
{
adapter..changeCursor(cursor);
}
}
}
}
adapter 类
public class SmsAdapter extends CursorAdapter
{
private LayoutInflater inflater ;
private ListView listView ;
public void bindView(View view, Context context, Cursor cursor)
{
SMSHolder smsholder = (SMSHolder) view.getTag();
String recipientId = cursor.getString(cursor.getColumnIndex("recipient_ids")) ;
String number = // 通过cursor 得到 号码 短信内容等要显示的内容。
........
smsholder.message_name.setText(......);
}
public View newView(Context context, Cursor cursor, ViewGroup parent)
{
View view = inflater.inflater(R.layout.sms_item , parent ,false ) ;
SMSHolder smsHolder = new SMSHolder();
smsHolder.message_name = (TextView) view.findViewById(R.id.sms_item_name) ;
smsHolder.message_snippet = (TextView)view.findViewById(R.id.sms_tiem_snippet);
view.setTag(smsHolder) ;
return view ;
}
public static class SMSHolder
{
TextView message_name ;
TextView message_snippet ;
}
}