您的位置:首页 > 移动开发 > Android开发

android 中电话记录,通讯录与短信的查询

2015-03-10 18:46 417 查看
首先看通讯录,在android中涉及通讯录的表有:

raw_contacts data 与 mimetypes

主要涉及的sql语句:

查询记录类型:

select id,mimitype from mimetypes;

查询显示的名称:

select _id,display from raw_contacts;

查询具体的数据:

select raw_contacts_id,mimitype_id,data1 from data;

访问raw_contacts表中数据的uri地址:

String uri_contacts=

“content://com.android.contacts/raw_contacts”;

访问data表中的数据的uri地址:

String uri_contacts_data = “content://com.android.contacts/data”;

访问电话号码的uri地址:

[code] public static String uri_contacts_phones = "content://com.android.contacts/data/phones";


访问短信的uri地址:

[code] public static  String uri_contacts_emails = "content://com.android.contacts/data/emails";


显示通讯录:

[code] listview 适配器的编写:
private SimpleCursorAdapter getAdapter() {
    // TODO Auto-generated method stub
    cursor=this.resolver.query(Uri.parse("content://call_log/calls"), 
            new String[]{"_id","number","type","date"},  null,  null,  null);
    this.adapter=new SimpleCursorAdapter(this, R.layout.item,cursor,new String[]{"number","type","date"},
            new int[]{R.id.number,R.id.type,R.id.date}){
           @Override
        public View getView(int position, View convertView,
                ViewGroup parent) {
            // TODO Auto-generated method stub
            View view=super.getView(position, convertView, parent);

            ///设置时间的显示格式
            TextView date_view=(TextView) view.findViewById(R.id.date);
            String Date_str=date_view.getText().toString().trim();
            long date=Long.parseLong(Date_str);

            SimpleDateFormat sdf=new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
            String str=sdf.format(new Date(date));

            date_view.setText(str);

            TextView type_view=(TextView) view.findViewById(R.id.type);
            String Type_str=type_view.getText().toString().trim();
            int type=Integer.parseInt(Type_str);
            switch(type){
            case 1:
                type_view.setText("接听电话");
                break;
            case 2:
                type_view.setText("呼叫电话");
                break;
            case 3:
                type_view.setText("未接电话");
                break;
            }
            return view;
        }
    };
    return adapter;
}


最后添加读写权限:

[code] <uses-permission android:name="android.permission.READ_CALL_LOG"/>
<uses-permission android:name="android.permission.WRITE_CALL_LOG"/>


读取邮件信息:

[code]private SimpleCursorAdapter getAdapter() {
    // TODO Auto-generated method stub
    cursor=this.resolver.query(Uri.parse("content://sms"), 
            new String[]{"_id","address","type","date","body"},
            null,  null,  null);
    this.adapter=new SimpleCursorAdapter(this, R.layout.item,cursor,new String[]{"address","type","date","body"},
            new int[]{R.id.address,R.id.type,R.id.date,R.id.body}){
           @Override
        public View getView(int position, View convertView,
                ViewGroup parent) {
            // TODO Auto-generated method stub
            View view=super.getView(position, convertView, parent);

            ///设置时间的显示格式
            TextView date_view=(TextView) view.findViewById(R.id.date);
            String Date_str=date_view.getText().toString().trim();
            long date=Long.parseLong(Date_str);

            SimpleDateFormat sdf=new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
            String str=sdf.format(new Date(date));

            date_view.setText(str);

            TextView type_view=(TextView) view.findViewById(R.id.type);
            String Type_str=type_view.getText().toString().trim();
            int type=Integer.parseInt(Type_str);
            switch(type){
            case 1:
                type_view.setText("接收短信");
                break;
            case 2:
                type_view.setText("发送短信");              
                break;
            }
            return view;
        }
    };
    return adapter;
}


最后添加读写权限:

[code] <uses-permission android:name="android.permission.READ_SMS"/>
<uses-permission android:name="android.permission.WRITE_SMS"/>


对联系人进行操作:

查询数据:

[code]public List<Map<String,Object>> getData(){
    List<Map<String,Object>> list=new ArrayList<Map<String,Object>>();
    Cursor contact_cursor=this.resolver.query(Uri.parse(uri_contacts), 
                     new String[]{"_id","display_name"},null,null,null);
    while(contact_cursor.moveToNext()){
        int _id=contact_cursor.getInt(contact_cursor.getColumnIndexOrThrow("_id"));
        String display_name=contact_cursor.getString(contact_cursor.getColumnIndexOrThrow("display_name"));

        Cursor phone_cursor=this.resolver.query(Uri.parse(uri_contacts_phones), new String[]{"raw_contact_id","data1"}, "raw_contact_id=?", new String[]{_id+""},null);
        StringBuilder sb_phone=new StringBuilder();

        while(phone_cursor.moveToNext()){
            String phone_code=phone_cursor.getString(phone_cursor.getColumnIndexOrThrow("data1"));
            sb_phone.append(phone_code+" ");
        }

        Cursor email_cursor=this.resolver.query(Uri.parse(uri_contacts_emails),new String[]{"raw_contact_id","data1"}, "raw_contact_id=?", new String[]{_id+""}, null);
        StringBuilder sb_email=new StringBuilder();
        while(email_cursor.moveToNext()){
            String email_str=email_cursor.getString(email_cursor.getColumnIndexOrThrow("data1"));
            sb_email.append(email_str+" ");
        }

        Map<String,Object> map=new HashMap<String,Object>();
        map.put("_id", _id);
        map.put("display_name",display_name);
        map.put("phone",sb_phone.toString());
        map.put("email",sb_email.toString());
        list.add(map);
    }
    return list;
}


长按listview条目删除:

[code]  listview.setOnItemLongClickListener(new OnItemLongClickListener() {

        public boolean onItemLongClick(AdapterView<?> parent, View view,
                int position, long id) {
            // TODO Auto-generated method stub
            Map<String,Object> map=(Map<String, Object>) parent.getItemAtPosition(position);
            String display_name=(String) map.get("display_name");
            int count=resolver.delete(Uri.parse(uri_contacts),"display_name=?", new String[]{display_name});

            //重新查询数据,更新适配器
            adapter=new SimpleAdapter(MainActivity.this,  getData(),R.layout.item, new String[]{"display_name","phone","email"},new int []{R.id.display_name,R.id.phone_code,R.id.email});
            listview.setAdapter(adapter);

            return count>0;
        }

    });


添加数据:

[code]//向数据表中添加数据
            //向表中插入数据获取主键
            ContentValues values=new ContentValues();
            Uri uri=resolver.insert(Uri.parse(uri_contacts),values);
            long id=ContentUris.parseId(uri);

            values.put("data1", display_name);
            values.put("raw_contact_id", id);
            values.put("mimetype", "vnd.android.cursor.item/name");
            resolver.insert(Uri.parse(uri_contacts_data),values);

            values.clear();
            values.put("data1", email);
            values.put("raw_contact_id", id);
            values.put("mimetype", "vnd.android.cursor.item/email_v2");
            resolver.insert(Uri.parse(uri_contacts_data),values);

            values.clear();
            values.put("data1", phone);
            values.put("raw_contact_id", id);
            values.put("mimetype", "vnd.android.cursor.item/phone_v2");
            resolver.insert(Uri.parse(uri_contacts_data),values);

            //重新查询数据,更新适配器
            adapter=new SimpleAdapter(MainActivity.this,  getData(),R.layout.item, new String[]{"display_name","phone","email"},new int []{R.id.display_name,R.id.phone_code,R.id.email});
            listview.setAdapter(adapter);
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐