短信查詢

短信是記錄在系統本地的mmssms.db表中的 /data/com.android.providers.telephony/databases中。

    Cursor mCursor =
    managedQuery(Uri.parse("content://sms"),
    new String[] {"_id,address,date,read,status,type,body,count(address) as "
                + "totleCount from (select _id,substr(address,4) as address,date,read,status,type,body "
                + "from sms where address like \"+86%\" union select _id,address,date,read,status,type,body "
                + "from sms where address not like \"+86%\") r group by r.address order by r.date desc --"},
                  null,
                  null,
                  null);

    這種是拋遊標的方式,千萬要小心處理,onPause()和onDestroy()要及時的關閉。

   if (null != mCursor && !mCursor.isClosed())
   {
       stopManagingCursor(mCursor);
   }

顯示會話短信的Adapter可以使用ResourceCursorAdapter

public class FarmerAdapter extends ResourceCursorAdapter
{
    private Context mContext;
    public final class MessageHolder{
        public ImageView img_icon;
        public ImageView newSms;
        public TextView nameTextView;
        public TextView unreadCount;
        public int count;
        public TextView countTextView;
        public TextView draft;
        public TextView date;
        public TextView message;
        public String phoneNumber;
        public String name;
        public String id;}
    public FarmerAdapter(Context context, int layout, Cursor c)
    {
        super(context, layout, c);
        this.mContext = context;
    }
    @Override
    public void bindView(View view, Context context, Cursor cursor)
    {
       /**
        * 這邊是寫的一些邏輯代碼
        */
    }
    @Override
    public View newView(Context context, Cursor cursor, ViewGroup parent)
    {
        View view = super.newView(context, cursor, parent);
        MessageHolder viewHolder = new MessageHolder();
        viewHolder.img_icon = (ImageView)view.findViewById(R.id.sms_headImage);
        viewHolder.nameTextView = (TextView)view.findViewById(R.id.name);
        viewHolder.unreadCount = (TextView)view.findViewById(R.id.unread_count);
        viewHolder.draft = (TextView)view.findViewById(R.id.draft);
        viewHolder.countTextView = (TextView)view.findViewById(R.id.all_count);
        viewHolder.date = (TextView)view.findViewById(R.id.date);
        viewHolder.message = (TextView)view.findViewById(R.id.sms_content);
        viewHolder.newSms = (ImageView)view.findViewById(R.id.newSms);
        view.setTag(viewHolder);
        return view;
    }
    @Override
    public void changeCursor(Cursor cursor)
    {
        super.changeCursor(cursor);
    }
}

可以自動的刷新界面,也可以手動刷新界面。當接收到短信時發送一個handler到短信顯示界面 進行刷新。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章