获取手机通讯录

xiaoxiao2021-02-27  233

首先是运行结果

由于通讯录在手机里是以数据库贮存的 所以我们可以通过一个方法

? 1 2 context.getContentResolver().query(Phone.CONTENT_URI,                 null , null , null , null ); 来获得通讯录 ,这个方法返回一个游标的数据类型,通过moveToNext()方法来获取所有的手机号码信息

当然读取手机通讯录需要权限 在adnroidManifest文件中声明即可

由于我也实现了打电话的功能 所以也要声明权限

? 1 2 <uses-permission android:name= "android.permission.READ_CONTACTS" > <uses-permission android:name= "android.permission.CALL_PHONE" ></uses-permission></uses-permission> 布局文件

activity_main.xml

? 1 2 3 4 5 6 <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" >        <listview android:id= "@+id/listView1" android:layout_width= "match_parent" android:layout_height= "wrap_content" >      </listview>   </relativelayout> listview的布局文件:item.xml,在这里我设置的头像为默认的 当然也可以在手机数据库中读取联系人的icon ? 1 2 3 4 5 6 7 8 9 10 <!--{cke_protected}{C}--> <relativelayout xmlns:android= "http://schemas.android.com/apk/res/android" android:layout_width= "match_parent" android:layout_height= "match_parent" >        <imageview android:id= "@+id/image" android:layout_width= "60dp" android:layout_height= "60dp" android:padding= "10dp" android:src= "@drawable/ic_launcher" >        <textview android:id= "@+id/name" android:paddingtop= "10dp" android:layout_width= "fill_parent" android:layout_height= "wrap_content" android:layout_torightof= "@id/image" android:text= "name" >        <textview android:id= "@+id/number" android:paddingtop= "5dp" android:layout_width= "fill_parent" android:layout_height= "wrap_content" android:layout_below= "@id/name" android:layout_torightof= "@id/image" android:text= "number" >   </textview></textview></imageview></relativelayout>

自己封装一个联系人信息的类 有两个变量

? 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 package com.example.getphonenumber;   public class PhoneInfo {      private String name;      private String number;      public PhoneInfo(String name, String number) {          this .name = name;          this .number = number;      }      public String getName() {          return name;      }      public String getNumber() {          return number;      } }

读取手机数据库中的通讯录

GetPhoneNumberFromMobile.class

? 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 package com.example.getphonenumber;   import java.util.ArrayList; import java.util.List;   import android.content.Context; import android.database.Cursor; import android.provider.ContactsContract.CommonDataKinds.Phone;   public class GetPhoneNumberFromMobile {      private List<phoneinfo> list;        public List<phoneinfo> getPhoneNumberFromMobile(Context context) {          // TODO Auto-generated constructor stub          list = new ArrayList<phoneinfo>();          Cursor cursor = context.getContentResolver().query(Phone.CONTENT_URI,                  null , null , null , null );          //moveToNext方法返回的是一个boolean类型的数据          while (cursor.moveToNext()) {              //读取通讯录的姓名              String name = cursor.getString(cursor                      .getColumnIndex(Phone.DISPLAY_NAME));              //读取通讯录的号码              String number = cursor.getString(cursor                      .getColumnIndex(Phone.NUMBER));              PhoneInfo phoneInfo = new PhoneInfo(name, number);              list.add(phoneInfo);          }          return list;      } }</phoneinfo></phoneinfo></phoneinfo> 自定义adapter ? 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 package com.example.getphonenumber;   import java.util.ArrayList; import java.util.List;   import android.content.Context; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import android.widget.BaseAdapter; import android.widget.TextView;   public class MyAdapter extends BaseAdapter{      private List<phoneinfo> list;      private Context context;            public MyAdapter(List<phoneinfo> list, Context context) {          this .list = list;          this .context = context;      }        @Override      public int getCount() {          // TODO Auto-generated method stub          return list.size();      }        @Override      public Object getItem( int position) {          // TODO Auto-generated method stub          return list.get(position);      }        @Override      public long getItemId( int position) {          // TODO Auto-generated method stub          return position;      }        @Override      public View getView( int position, View convertView, ViewGroup parent) {          // TODO Auto-generated method stub          if (convertView== null ){              ViewHolder viewHolder= new ViewHolder();              LayoutInflater inflater=LayoutInflater.from(context);              convertView=inflater.inflate(R.layout.item, null );              viewHolder.name=(TextView) convertView.findViewById(R.id.name);              viewHolder.number=(TextView) convertView.findViewById(R.id.number);              viewHolder.name.setText(list.get(position).getName());              viewHolder.number.setText(list.get(position).getNumber());          }          return convertView;      }      public class ViewHolder{          TextView name;          TextView number;      } }</phoneinfo></phoneinfo> MainActivity中listview加载适配器 并为其添加点击监听事件 ? 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 package com.example.getphonenumber;   import java.util.ArrayList; import java.util.List;   import android.net.Uri; import android.os.Bundle; import android.app.Activity; import android.content.Intent; import android.view.Menu; import android.view.View; import android.widget.AdapterView; import android.widget.AdapterView.OnItemClickListener; import android.widget.ListView; import android.widget.Toast;   public class MainActivity extends Activity implements OnItemClickListener {      private ListView lv;      private MyAdapter adapter;      private GetPhoneNumberFromMobile getPhoneNumberFromMobile;      private List<phoneinfo> list = new ArrayList<phoneinfo>();        protected void onCreate(Bundle savedInstanceState) {          super .onCreate(savedInstanceState);          setContentView(R.layout.activity_main);          lv = (ListView) findViewById(R.id.listView1);          getPhoneNumberFromMobile = new GetPhoneNumberFromMobile();          list = getPhoneNumberFromMobile.getPhoneNumberFromMobile( this );          adapter = new MyAdapter(list, this );          lv.setAdapter(adapter);          lv.setOnItemClickListener( this );      }        @Override      public void onItemClick(AdapterView<!--?--> parent, View view, int position,              long id) {          // TODO Auto-generated method stub          String number = list.get(position).getNumber();          Intent intent = new Intent();          intent.setAction( "android.intent.action.CALL" );          intent.addCategory(Intent.CATEGORY_DEFAULT);          intent.setData(Uri.parse( "tel:" +number));          startActivity(intent);      }   }</phoneinfo></phoneinfo>
转载请注明原文地址: https://www.6miu.com/read-9729.html

最新回复(0)