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

首頁 > 系統 > Android > 正文

Android實現獲取聯系人電話號碼功能

2019-12-12 03:21:02
字體:
來源:轉載
供稿:網友

本篇文檔主要記錄一下獲取聯系人的電話號碼的一種方式。

1、選擇聯系人

............//構造一個隱式的Intent,拉起聯系人界面final Intent pickIntent = new Intent(Intent.ACTION_PICK,  ContactsContract.Contacts.CONTENT_URI);mSuspectButton = (Button)v.findViewById(R.id.crime_suspect);mSuspectButton.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) {  startActivityForResult(pickIntent, REQUEST_CONTACT); }});...........

2、處理選擇結果

@Overridepublic void onActivityResult(int requestCode, int resultCode, Intent data) { ........... } else if (requestCode == REQUEST_CONTACT && data != null) {  //在聯系人界面選擇完畢后,返回的結果中攜帶了對應的Uri  Uri contactUri = data.getData();  String[] queryFields = new String[] {    ContactsContract.Contacts.DISPLAY_NAME,    //查詢聯系人對應的contactId    ContactsContract.Contacts._ID  };  Cursor c = getActivity().getContentResolver()    .query(contactUri, queryFields, null, null, null);  if (c == null) {   return;  }  try {   if (c.getCount() == 0) {    return;   }   c.moveToFirst();   //聯系人的名稱   String suspect = c.getString(0);   mCrime.setSuspect(suspect);   mSuspectButton.setText(suspect);   //記錄聯系人的contactId   mCrime.setContactId(c.getString(1));   mDialButton.setEnabled(true);  } finally {   c.close();  } }}

3、申請運行時權限

在Android6.0以后,READ_CONTACTS變為運行時權限。
因此,除了在AndroidManifest.xml中聲明權限外(兼容低版本),還需要在代碼中主動申請。

...............mDialButton = (Button) v.findViewById(R.id.crime_dial);mDialButton.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) {  //SDK >= 23時,定義了Activity.checkSelfPermission方法  //為了避免對SDK版本的判斷,兼容低版本,一般都是使用兼容庫中的方法  //此處使用的是android.support.v4.app.Fragment中的checkSelfPermission  //對于Activity,可以使用ActivityCompat中的方法  int hasReadContactsPermission = checkSelfPermission(getContext(),    android.Manifest.permission.READ_CONTACTS);  //判斷是否已有對應權限  //用戶主動賦予過一次后,該應用就一直具有該權限,除非在應用管理中撤銷  if (hasReadContactsPermission != PackageManager.PERMISSION_GRANTED) {   //沒有權限,則需要申請權限   //當用戶選擇“拒絕權限申請,并不再提示”后,仍可能點擊該按鍵   //因此需要彈出提示框,提醒用戶該功能需要權限   //這就要用到shouldShowRequestPermissionRationale方法   if (!shouldShowRequestPermissionRationale(android.Manifest.permission.READ_CONTACTS)) {    showMessageOKCancel("You need to allow access to Contacts",     new DialogInterface.OnClickListener() {      @Override      public void onClick(DialogInterface dialog, int which) {       //仍調用兼容庫中的方法,申請權限       requestPermissions(        new String[] {Manifest.permission.READ_CONTACTS},        ASK_READ_CONTACTS_PERMISSION);       }      });    return;   }   requestPermissions(new String[] {Manifest.permission.READ_CONTACTS},     ASK_READ_CONTACTS_PERMISSION);   return;  }  //有權限則直接獲取電話號碼,并撥號  getPhoneNumberAndDial(); }});................private void showMessageOKCancel(String message, DialogInterface.OnClickListener okListener) { new AlertDialog.Builder(getContext())  .setMessage(message)  .setPositiveButton("OK", okListener)  .setNegativeButton("Cancel", null)  .create()  .show();}

4、處理權限申請結果

@Overridepublic void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) { switch (requestCode) {  case ASK_READ_CONTACTS_PERMISSION:   //由于只申請了一個權限,因此grantResults[0]就是對應權限的申請結果   if (grantResults[0] == PackageManager.PERMISSION_GRANTED) {     //權限申請成功,則可以獲取電話號碼并撥號     getPhoneNumberAndDial();   } else {    Toast.makeText(getContext(),      "READ_CONTACTS Denied",      Toast.LENGTH_SHORT)      .show();   }   return;  default:   super.onRequestPermissionsResult(requestCode, permissions, grantResults); }}

這個地方需要注意的是:

1)、如果不使用兼容庫中的Fragment,那么onRequestPermissionsResult必須定義在包含該Fragment的Activity中,才能保證被調用。

2)、如果用戶點擊過“拒絕權限申請,并不再提示”類似的按鍵后,再次申請權限的結果將一直是DENIED。
此時,必須進入設置中的應用管理,開啟運行時權限。

5、查詢電話號碼并撥號

private void getPhoneNumberAndDial() { //根據之前獲取到的contactId,得到CommonDataKinds.Phone表中的信息 Cursor c = getActivity().getContentResolver().query(   ContactsContract.CommonDataKinds.Phone.CONTENT_URI,   null,   ContactsContract.CommonDataKinds.Phone.CONTACT_ID + " = ?",   new String[] {mCrime.getContactId()},   null); if (c == null) {  return; } try {  if (c.getCount() != 0) {   c.moveToFirst();   //得到Phone Number對應的indexId   int index = c.getColumnIndex(ContactsContract.CommonDataKinds.Phone.NUMBER);   //得到phone Number   String number = c.getString(index);   Uri realNumber = Uri.parse("tel: " + number);   //ACTION_DIAL拉起撥號盤撥號,或利用ACTION_CALL直接撥號   Intent i = new Intent(Intent.ACTION_DIAL);   i.setData(realNumber);   startActivity(i);  } else {   Toast.makeText(getContext(), "choose contact again", Toast.LENGTH_LONG).show();  } } finally {  c.close(); }}

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持武林網。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 北海市| 筠连县| 夏津县| 唐海县| 双牌县| 房山区| 陇西县| 连江县| 五家渠市| 宜春市| 手游| 尤溪县| 泰宁县| 潼关县| 自贡市| 锡林浩特市| 安丘市| 嘉义市| 赣榆县| 城口县| 穆棱市| 苏尼特右旗| 东乡族自治县| 文安县| 兴义市| 贡嘎县| 永宁县| 阳原县| 阿拉善左旗| 奉新县| 高碑店市| 新河县| 三河市| 曲松县| 芜湖县| 水城县| 华蓥市| 营山县| 台州市| 庆阳市| 楚雄市|