国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學院 > 開發設計 > 正文

ContentProvider與隱式Intent獲取手機聯系人通訊錄信息或電話的方法

2019-11-09 16:39:14
字體:
來源:轉載
供稿:網友

1 用隱式Intent獲取聯系人

    第一步、在需要讀取或者修改聯系人信息的前要在manifests文件下聲明讀寫權限,否則在后續的調用中會出錯

    <uses-permission android:name="android.permission.READ_CONTACTS"></uses-permission>     第二步采用ACTION_PICK為動作聲明一個隱式Intent。

  

 bt_main_button = (Button) findViewById(R.id.bt_main_button);        bt_main_button.setOnClickListener(new View.OnClickListener() {            @Override            public void onClick(View v) {                Intent i = new Intent(Intent.ACTION_PICK, ContactsContract.Contacts.CONTENT_URI);   //聲明隱式Intent,從聯系人中獲取一個返回信息                startActivityForResult(i,RESULT_CANCELED);            }        });

第三步、在onActivityResult中獲取返回的URI,該URI是指向用戶所選的聯系人的定位符,通過該URI可以查詢聯系人數據庫從而提取出聯系人id與姓名。而通過聯系人id可以進一步在數據庫中提取出聯系人的電話。其中聯系人名字和id要在ContactsContract.Contacts中獲取,而電話則ContactsContract.CommonDataKinds.Phone中獲取。

 @Override    PRotected void onActivityResult(int requestCode, int resultCode, Intent data) {        if (requestCode == RESULT_CANCELED){            Uri contactUri = data.getData();             //該數據URI是一個指向用戶所選聯系人的定位符            Cursor c =getContentResolver().query(contactUri, null, null, null, null); //查詢聯系人數據庫,獲得一個可用的Cursor            if(c.moveToFirst()) {                        //將Cursor移動到第一條記錄                String suspect = c.getString(c.getColumnIndex(ContactsContract.Contacts.DISPLAY_NAME));        //通過Cursor c獲得聯系人名字                String id = c.getString(c.getColumnIndex(ContactsContract.Contacts._ID));                      //通過Cursor c獲得聯系人id                Cursor c2 =getContentResolver().query(ContactsContract.CommonDataKinds.Phone.CONTENT_URI, null,                 ContactsContract.CommonDataKinds.Phone.CONTACT_ID + "=" + id, null, null);                //在ContactsContract.CommonDataKinds.Phone.CONTENT_URI里,                // 通過上面獲得的聯系人id獲得一個新的Cursor c2                c2.moveToFirst();                String phonenum = c2.getString(c2.getColumnIndex(ContactsContract.CommonDataKinds.Phone.NUMBER));   //通過Cursor c2獲得聯系人電                //給控件賦值                tv_main_view.setText(suspect+"      "+phonenum);                c2.close();                    //關閉Cursor c2                c.close();                     //關閉Cursor c            }        }    }

2 通過ContentProvider得到手機上所有聯系人的信息   

           第一步    在manifests文件下聲明讀寫權限 與隱式intent一樣的

  <uses-permission android:name="android.permission.READ_CONTACTS"></uses-permission>           第二步 得到內容訪問者

  ContentResolver cr=getContentResolver();            第三步  得到手機中所有的聯系人的信息并展示在listview中  

    

    List<String> namelist=new ArrayList<>();    List<String> tellist=new ArrayList<>();    //ContentProvider得到所有聯系的信息    public void getContacts(View view){       //獲取聯系人        Uri uri=Uri.parse("content://com.android.contacts/raw_contacts");         Cursor cursor= cr.query(uri,null,null,null,null);         while(cursor.moveToNext()){             //得到聯系人是id             int id=cursor.getInt(cursor.getColumnIndex("_id"));             String name=cursor.getString(cursor.getColumnIndex("display_name"));         //    Log.i("text", "getContacts: "+id+name);             //獲取相對應的聯系人的數據(電話號碼)             Uri uriData=Uri.parse("content://com.android.contacts/raw_contacts/"+id+"/data");             Cursor cursorData=cr.query(uriData,null,null,null,null);             while (cursorData.moveToNext()){                 String data1=cursorData.getString(cursorData.getColumnIndex("data1"));                 //int type=cursorData.getInt(cursorData.getColumnIndex("mimetype_id"));                 //得到數據的類型(郵件地址,電話號碼等等)這里我們只需得到電話號碼                 String type=cursorData.getString(cursorData.getColumnIndex("mimetype"));                 if("vnd.android.cursor.item/phone_v2".equals(type)){                       namelist.add(name);                       tellist.add(data1);                 }             }         }        List<Map<String,Object>> date=new ArrayList<>();        for (int i = 0; i <namelist.size() ; i++) {            Map<String,Object> map=new HashMap<>();            map.put("name",namelist.get(i));            map.put("tel",tellist.get(i));            date.add(map);        }        SimpleAdapter adpater=new SimpleAdapter(this,date,R.layout.item_list,new String[]{"name","tel"},new int[]{R.id.tv_list_name,R.id.tv_list_apont} );         lv_main_view.setAdapter(adpater);        lv_main_view.setOnItemClickListener(new AdapterView.OnItemClickListener() {            @Override            public void onItemClick(AdapterView<?> parent, View view, int position, long id) {                tv_main_view.setText(namelist.get(position)+"      "+tellist.get(position));            }        });    }

兩種方式結合源代碼:java代碼:

import android.content.ContentResolver;import android.content.Intent;import android.net.Uri;import android.provider.ContactsContract;import android.support.v7.app.AppCompatActivity;import android.os.Bundle;import android.util.Log;import android.view.View;import android.database.Cursor;import android.widget.Adapter;import android.widget.AdapterView;import android.widget.Button;import android.widget.ListView;import android.widget.SimpleAdapter;import android.widget.TextView;import java.util.ArrayList;import java.util.HashMap;import java.util.List;import java.util.Map;public class MainActivity extends AppCompatActivity {    private ContentResolver cr;    List<String> namelist=new ArrayList<>();    List<String> tellist=new ArrayList<>();    private ListView lv_main_view;    private TextView tv_main_view;    private Button bt_main_button;    @Override    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.activity_main);        lv_main_view = (ListView) findViewById(R.id.lv_main_view);        tv_main_view = (TextView) findViewById(R.id.tv_main_view);        bt_main_button = (Button) findViewById(R.id.bt_main_button);        bt_main_button.setOnClickListener(new View.OnClickListener() {            @Override            public void onClick(View v) {                Intent i = new Intent(Intent.ACTION_PICK, ContactsContract.Contacts.CONTENT_URI);   //聲明隱式Intent,從聯系人中獲取一個返回信息                startActivityForResult(i,RESULT_CANCELED);            }        });          cr = getContentResolver();    }    @Override    protected void onActivityResult(int requestCode, int resultCode, Intent data) {        if (requestCode == RESULT_CANCELED){            Uri contactUri = data.getData();             //該數據URI是一個指向用戶所選聯系人的定位符            Cursor c =getContentResolver().query(contactUri, null, null, null, null); //查詢聯系人數據庫,獲得一個可用的Cursor            if(c.moveToFirst()) {                        //將Cursor移動到第一條記錄                String suspect = c.getString(c.getColumnIndex(ContactsContract.Contacts.DISPLAY_NAME));        //通過Cursor c獲得聯系人名字                String id = c.getString(c.getColumnIndex(ContactsContract.Contacts._ID));                      //通過Cursor c獲得聯系人id                Cursor c2 =getContentResolver().query(ContactsContract.CommonDataKinds.Phone.CONTENT_URI, null,                 ContactsContract.CommonDataKinds.Phone.CONTACT_ID + "=" + id, null, null);                //在ContactsContract.CommonDataKinds.Phone.CONTENT_URI里,                // 通過上面獲得的聯系人id獲得一個新的Cursor c2                c2.moveToFirst();                String phonenum = c2.getString(c2.getColumnIndex(ContactsContract.CommonDataKinds.Phone.NUMBER));   //通過Cursor c2獲得聯系人電                //給控件賦值                tv_main_view.setText(suspect+"      "+phonenum);                c2.close();                    //關閉Cursor c2                c.close();                     //關閉Cursor c            }        }    }    public void getContacts(View view){       //獲取聯系人        Uri uri=Uri.parse("content://com.android.contacts/raw_contacts");         Cursor cursor= cr.query(uri,null,null,null,null);         while(cursor.moveToNext()){             //得到聯系人是id             int id=cursor.getInt(cursor.getColumnIndex("_id"));             String name=cursor.getString(cursor.getColumnIndex("display_name"));         //    Log.i("text", "getContacts: "+id+name);             //獲取相對應的聯系人的數據(電話號碼)             Uri uriData=Uri.parse("content://com.android.contacts/raw_contacts/"+id+"/data");             Cursor cursorData=cr.query(uriData,null,null,null,null);             while (cursorData.moveToNext()){                 String data1=cursorData.getString(cursorData.getColumnIndex("data1"));                 //int type=cursorData.getInt(cursorData.getColumnIndex("mimetype_id"));                 //得到數據的類型(郵件地址,電話號碼等等)這里我們只需得到電話號碼                 String type=cursorData.getString(cursorData.getColumnIndex("mimetype"));                 if("vnd.android.cursor.item/phone_v2".equals(type)){                       namelist.add(name);                       tellist.add(data1);                 }             }         }        List<Map<String,Object>> date=new ArrayList<>();        for (int i = 0; i <namelist.size() ; i++) {            Map<String,Object> map=new HashMap<>();            map.put("name",namelist.get(i));            map.put("tel",tellist.get(i));            date.add(map);        }        SimpleAdapter adpater=new SimpleAdapter(this,date,R.layout.item_list,new String[]{"name","tel"},new int[]{R.id.tv_list_name,R.id.tv_list_apont} );         lv_main_view.setAdapter(adpater);        lv_main_view.setOnItemClickListener(new AdapterView.OnItemClickListener() {            @Override            public void onItemClick(AdapterView<?> parent, View view, int position, long id) {                tv_main_view.setText(namelist.get(position)+"      "+tellist.get(position));            }        });    }

xml代碼

<?xml version="1.0" encoding="utf-8"?><LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"    xmlns:tools="http://schemas.android.com/tools" android:id="@+id/activity_main"    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"    android:orientation="vertical"    tools:context="com.mdf_android01.android25_contentresolver02.MainActivity">    <TextView        android:layout_width="match_parent"        android:layout_height="30dp"      android:id="@+id/tv_main_view"        >    </TextView>    <Button android:layout_width="match_parent"        android:layout_height="wrap_content"        android:text="ContentProvider獲取所有聯系人"        android:onClick="getContacts"        />      <Button android:layout_width="match_parent"        android:layout_height="wrap_content"        android:text="隱式跳轉獲取聯系人"        android:id="@+id/bt_main_button"        />    <ListView        android:layout_width="match_parent"        android:layout_height="wrap_content"        android:id="@+id/lv_main_view"        >    </ListView></LinearLayout>

真機效果圖


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 安图县| 南江县| 阳山县| 进贤县| 葵青区| 西充县| 新巴尔虎左旗| 兰州市| 祁连县| 延庆县| 六安市| 全椒县| 盈江县| 博乐市| 九龙县| 师宗县| 怀集县| 隆回县| 阿克陶县| 崇明县| 读书| 宁波市| 阿拉善盟| 衡阳市| 禄劝| 盈江县| 红安县| 合川市| 垫江县| 项城市| 信阳市| 湖北省| 彭泽县| 伊春市| 兴隆县| 甘泉县| 凤城市| 舞阳县| 恩平市| 赫章县| 安岳县|