91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

如何在Android應用中利用Intent實現獲取聯系人的信息

發布時間:2020-11-30 17:19:37 來源:億速云 閱讀:339 作者:Leah 欄目:移動開發

今天就跟大家聊聊有關如何在Android應用中利用Intent實現獲取聯系人的信息,可能很多人都不太了解,為了讓大家更加了解,小編給大家總結了以下內容,希望大家根據這篇文章可以有所收獲。

Intent的使用

  • intent是一個好東西

  • 他可以啟動Activity還可以回調數據

  • 調用各種數據,聯系人等等

  • 進程之間可以接收同一個intent

  • 三大組件的橋梁

解釋一下為什么是三大組件吧,都知道四大組件分別是Activity,Service,BroadCastReceiver,ContentProvider。Intent是Activity,Service,BroadCastReceiver這三大組件之間的橋梁,而ContentProvider是通過ContentResolver來通信的,所以說是三大組件的橋梁。

Intent使用的時候需要定義一個action和data,action就是他要執行的動作,data就是他所執行動作的數據。

比如說我們要撥打電話

Uri number = Uri.parse("tel:10086");
 Intent callIntent = new Intent(Intent.ACTION_CALL, number);
 startActivity(callIntent);

當然不要忘記加權限

<uses-permission android:name="android.permission.CALL_PHONE"/>

查看網頁

Uri webpage = Uri.parse("http://www.baidu.com");
Intent webIntent = new Intent(Intent.ACTION_VIEW, webpage);

發送一個帶附件的email

查看地圖等等都可以實現,但是不要忘記加上權限。
忘記說了,盡管Android系統會確保每一個確定的intent會被系統內置的app接收,但是我們還是應該在觸發一個intent之前做驗證是否有App接受這個intent的步驟。(如果觸發了一個intent,而且沒有任何一個app會去接收這個intent,則app會crash。)

為了驗證是否有合適的activity會響應這個intent,需要執行queryIntentActivities() 來獲取到能夠接收這個intent的所有activity的list。若返回的List非空,那么我們才可以安全的使用這個intent。例如:

PackageManager packageManager = getPackageManager();
List<ResolveInfo> activities = packageManager.queryIntentActivities(intent, 0);

下面就說些比較實用的吧,在開發中我們經常會遇到讀取手機聯系人信息的時候把,分成兩部分說一下讀取聯系人吧

讀取單個聯系人

注意了,因為聯系人內容是敏感權限,6.0以上的要動態授權,并自Manifest文件中添加讀取手機聯系人的權限。

<uses-permission android:name="android.permission.READ_CONTACTS"/>

讀取單個聯系人是通過startActivityForResult來獲取的,返回你需要的某個聯系人信息,當然,如果你需要全部聯系人信息,也請不要著急,下面也會有介紹。

public static final int PICK_CONTACT_REQUEST = 1;

//這是拉起手機聯系人列表
private void pickContact() {
 Intent pickContactIntent = new Intent(Intent.ACTION_PICK, Uri.parse("content://contacts"));
 pickContactIntent.setType(Phone.CONTENT_TYPE); // Show user only contacts w/ phone numbers
 startActivityForResult(pickContactIntent, PICK_CONTACT_REQUEST);
}

通過startActivityForResult拉起聯系人列表之后,我們需要重新onActivityResult方法,第二個activity指定的result code。如果操作成功則是RESULT_OK ,如果用戶沒有操作成功,而是直接點擊回退或者其他什么原因,那么則是RESULT_CANCELED,這也是result code默認是RESULT_CANCELED的原因,里面就會有我們需要的數據。

 @Override
 protected void onActivityResult(int requestCode, int resultCode, Intent data) {
 if (requestCode == 1) {
  if (resultCode == RESULT_OK) {
  Uri contactUri = data.getData();
  //如果需要別的信息,就在這里添加參數
  String[] projection = {ContactsContract.CommonDataKinds.Phone.NUMBER};
  Cursor cursor = getContentResolver()
   .query(contactUri, projection, null, null, null);
  //將游標移動到第一行
  cursor.moveToFirst();
  //返回列名對應的列的索引值
  int column = cursor.getColumnIndex(ContactsContract.CommonDataKinds.Phone.NUMBER);
  //返回當前行指定列的值,這里就是電話
  String number = cursor.getString(column);
  Log.e("onActivityResult: ", number);
  }
 }
 }

讀取所有聯系人

private static final int PHONES_NUMBER_INDEX = 1;
private static final int PHONES_DISPLAY_NAME_INDEX = 0;
private static final int PHONES_CONTACT_ID_INDEX = 3;
private static final int PHONES_PHOTO_ID_INDEX = 2;

private void getPhoneContacts() {
 ContentResolver resolver = getContentResolver();

 String[] projection = {ContactsContract.CommonDataKinds.Phone.DISPLAY_NAME,
  ContactsContract.CommonDataKinds.Phone.NUMBER,
  ContactsContract.CommonDataKinds.Photo.PHOTO_ID,
  ContactsContract.CommonDataKinds.Phone.CONTACT_ID,
//  "_id"
 };//COLLATE LOCALIZED
 Uri uri = ContactsContract.CommonDataKinds.Phone.CONTENT_URI;
 // 獲取手機聯系人
 Cursor phoneCursor = resolver.query(uri, projection, null, null, null);
 if (phoneCursor != null) {
  while (phoneCursor.moveToNext()) {
  //得到手機號碼
  String phoneNumber = phoneCursor.getString(PHONES_NUMBER_INDEX);
  //當手機號碼為空的或者為空字段 跳過當前循環
  if (TextUtils.isEmpty(phoneNumber))
   continue;
  //得到聯系人名稱
  String contactName = phoneCursor.getString(PHONES_DISPLAY_NAME_INDEX);
  //得到聯系人ID
  Long contactid = phoneCursor.getLong(PHONES_CONTACT_ID_INDEX);
  //得到聯系人頭像ID
  Long photoid = phoneCursor.getLong(PHONES_PHOTO_ID_INDEX);
  //得到聯系人頭像Bitamp
  Bitmap contactPhoto = null;
  //photoid 大于0 表示聯系人有頭像 如果沒有給此人設置頭像則給他一個默認的
  if (photoid > 0) {
   Uri uri2 = ContentUris.withAppendedId(ContactsContract.Contacts.CONTENT_URI, contactid);
   InputStream input = ContactsContract.Contacts.openContactPhotoInputStream(resolver, uri2);
   contactPhoto = BitmapFactory.decodeStream(input);
  } else {
   contactPhoto = BitmapFactory.decodeResource(getResources(), R.mipmap.ic_launcher);
  }
  /**
   * 創建model類用于保存聯系人信息
   */
  Log.e("getPhoneContacts: ", "--- " +phoneNumber +" --- "+ "--- "+contactName +" --- "+ contactid);
  }
  phoneCursor.close();
 }
 }

看完上述內容,你們對如何在Android應用中利用Intent實現獲取聯系人的信息有進一步的了解嗎?如果還想了解更多知識或者相關內容,請關注億速云行業資訊頻道,感謝大家的支持。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

海南省| 平果县| 江口县| 阜宁县| 伊川县| 大足县| 尉氏县| 扬中市| 海林市| 敖汉旗| 盐边县| 左云县| 龙陵县| 安化县| 孝义市| 云龙县| 肥乡县| 信丰县| 平利县| 东乌珠穆沁旗| 陕西省| 峡江县| 剑川县| 海原县| 信丰县| 玉环县| 芜湖市| 虹口区| 庆元县| 通州市| 右玉县| 大港区| 玛纳斯县| 丰镇市| 嘉黎县| 临清市| 分宜县| 齐齐哈尔市| 黄骅市| 吴旗县| 长兴县|