Android實現(xiàn)通訊錄效果——獲取手機號碼和姓名
首先給大家展示下運行效果圖:
由于通訊錄在手機里是以數(shù)據(jù)庫貯存的 所以我們可以通過一個方法
context.getContentResolver().query(Phone.CONTENT_URI, null, null, null, null);
來獲得通訊錄 ,這個方法返回一個游標的數(shù)據(jù)類型,通過moveToNext()方法來獲取所有的手機號碼信息
當然讀取手機通訊錄需要權限 在adnroidManifest文件中聲明即可
由于我也實現(xiàn)了打電話的功能 所以也要聲明權限
<uses-permission android:name="android.permission.READ_CONTACTS"> <uses-permission android:name="android.permission.CALL_PHONE"></uses-permission></uses-permission>
布局文件
activity_main.xml
<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,在這里我設置的頭像為默認的 當然也可以在手機數(shù)據(jù)庫中讀取聯(lián)系人的icon
<!--{cke_protected}{C}%3C!%2D%2D%3Fxml%20version%3D%221.0%22%20encoding%3D%22utf-8%22%3F%2D%2D%3E--> <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>
自己封裝一個聯(lián)系人信息的類 有兩個變量
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; } }
讀取手機數(shù)據(jù)庫中的通訊錄
GetPhoneNumberFromMobile.class
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類型的數(shù)據(jù) 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
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中l(wèi)istview加載適配器 并為其添加點擊監(jiān)聽事件
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>
- 使用adb命令向Android模擬器中導入通訊錄聯(lián)系人的方法
- Android獲取手機通訊錄、sim卡聯(lián)系人及調(diào)用撥號界面方法
- Android通訊錄開發(fā)之刪除功能的實現(xiàn)方法
- Android個人手機通訊錄開發(fā)詳解
- Android讀取手機通訊錄聯(lián)系人到自己項目
- Android破解微信獲取聊天記錄和通訊錄信息(靜態(tài)方式)
- android仿微信通訊錄搜索示例(匹配拼音,字母,索引位置)
- Android自定義View實現(xiàn)通訊錄字母索引(仿微信通訊錄)
- Android實現(xiàn)仿通訊錄側(cè)邊欄滑動SiderBar效果代碼
- Android Studio實現(xiàn)簡單的通訊錄
相關文章
Android之rk3588?開發(fā)環(huán)境準備及問題解決方法
這篇文章主要介紹了Android中的rk3588?開發(fā)環(huán)境準備,本文給大家分享遇到的問題及解決方法,本文給大家講解的非常詳細對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下2022-11-11Android4.X讀取SIM卡短信和聯(lián)系人相關類實例分析
這篇文章主要介紹了Android 4.X讀取SIM卡短信和聯(lián)系人相關類,以實例形式分析了Android 4.X讀取SIM卡短信和聯(lián)系人的兩個相關類的功能、用法與注意事項,具有一定參考借鑒價值,需要的朋友可以參考下2015-10-10Android開發(fā)-之環(huán)境的搭建(圖文詳解)
這篇文章主要介紹了Android開發(fā)-之環(huán)境的搭建(圖文詳解),具有一定的參考價值,有興趣的可以了解一下。2016-11-11Android實現(xiàn)滑動折疊Header全流程詳解
這篇文章主要介紹了Android實現(xiàn)滑動折疊Header,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習吧2022-11-11