成人午夜视频全免费观看高清-秋霞福利视频一区二区三区-国产精品久久久久电影小说-亚洲不卡区三一区三区一区

如何在Android應(yīng)用中利用Intent實(shí)現(xiàn)獲取聯(lián)系人的信息

今天就跟大家聊聊有關(guān)如何在Android應(yīng)用中利用Intent實(shí)現(xiàn)獲取聯(lián)系人的信息,可能很多人都不太了解,為了讓大家更加了解,小編給大家總結(jié)了以下內(nèi)容,希望大家根據(jù)這篇文章可以有所收獲。

專注于為中小企業(yè)提供成都網(wǎng)站設(shè)計(jì)、網(wǎng)站制作服務(wù),電腦端+手機(jī)端+微信端的三站合一,更高效的管理,為中小企業(yè)永平免費(fèi)做網(wǎng)站提供優(yōu)質(zhì)的服務(wù)。我們立足成都,凝聚了一批互聯(lián)網(wǎng)行業(yè)人才,有力地推動(dòng)了成百上千企業(yè)的穩(wěn)健成長(zhǎng),幫助中小企業(yè)通過網(wǎng)站建設(shè)實(shí)現(xiàn)規(guī)模擴(kuò)充和轉(zhuǎn)變。

Intent的使用

  • intent是一個(gè)好東西

  • 他可以啟動(dòng)Activity還可以回調(diào)數(shù)據(jù)

  • 調(diào)用各種數(shù)據(jù),聯(lián)系人等等

  • 進(jìn)程之間可以接收同一個(gè)intent

  • 三大組件的橋梁

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

Intent使用的時(shí)候需要定義一個(gè)action和data,action就是他要執(zhí)行的動(dòng)作,data就是他所執(zhí)行動(dòng)作的數(shù)據(jù)。

比如說我們要撥打電話

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

當(dāng)然不要忘記加權(quán)限

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

查看網(wǎng)頁(yè)

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

發(fā)送一個(gè)帶附件的email

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

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

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

下面就說些比較實(shí)用的吧,在開發(fā)中我們經(jīng)常會(huì)遇到讀取手機(jī)聯(lián)系人信息的時(shí)候把,分成兩部分說一下讀取聯(lián)系人吧

讀取單個(gè)聯(lián)系人

注意了,因?yàn)槁?lián)系人內(nèi)容是敏感權(quán)限,6.0以上的要?jiǎng)討B(tài)授權(quán),并自Manifest文件中添加讀取手機(jī)聯(lián)系人的權(quán)限。

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

讀取單個(gè)聯(lián)系人是通過startActivityForResult來獲取的,返回你需要的某個(gè)聯(lián)系人信息,當(dāng)然,如果你需要全部聯(lián)系人信息,也請(qǐng)不要著急,下面也會(huì)有介紹。

public static final int PICK_CONTACT_REQUEST = 1;

//這是拉起手機(jī)聯(lián)系人列表
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拉起聯(lián)系人列表之后,我們需要重新onActivityResult方法,第二個(gè)activity指定的result code。如果操作成功則是RESULT_OK ,如果用戶沒有操作成功,而是直接點(diǎn)擊回退或者其他什么原因,那么則是RESULT_CANCELED,這也是result code默認(rèn)是RESULT_CANCELED的原因,里面就會(huì)有我們需要的數(shù)據(jù)。

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

讀取所有聯(lián)系人

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;
 // 獲取手機(jī)聯(lián)系人
 Cursor phoneCursor = resolver.query(uri, projection, null, null, null);
 if (phoneCursor != null) {
  while (phoneCursor.moveToNext()) {
  //得到手機(jī)號(hào)碼
  String phoneNumber = phoneCursor.getString(PHONES_NUMBER_INDEX);
  //當(dāng)手機(jī)號(hào)碼為空的或者為空字段 跳過當(dāng)前循環(huán)
  if (TextUtils.isEmpty(phoneNumber))
   continue;
  //得到聯(lián)系人名稱
  String contactName = phoneCursor.getString(PHONES_DISPLAY_NAME_INDEX);
  //得到聯(lián)系人ID
  Long contactid = phoneCursor.getLong(PHONES_CONTACT_ID_INDEX);
  //得到聯(lián)系人頭像ID
  Long photoid = phoneCursor.getLong(PHONES_PHOTO_ID_INDEX);
  //得到聯(lián)系人頭像Bitamp
  Bitmap contactPhoto = null;
  //photoid 大于0 表示聯(lián)系人有頭像 如果沒有給此人設(shè)置頭像則給他一個(gè)默認(rèn)的
  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);
  }
  /**
   * 創(chuàng)建model類用于保存聯(lián)系人信息
   */
  Log.e("getPhoneContacts: ", "--- " +phoneNumber +" --- "+ "--- "+contactName +" --- "+ contactid);
  }
  phoneCursor.close();
 }
 }

看完上述內(nèi)容,你們對(duì)如何在Android應(yīng)用中利用Intent實(shí)現(xiàn)獲取聯(lián)系人的信息有進(jìn)一步的了解嗎?如果還想了解更多知識(shí)或者相關(guān)內(nèi)容,請(qǐng)關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道,感謝大家的支持。

本文名稱:如何在Android應(yīng)用中利用Intent實(shí)現(xiàn)獲取聯(lián)系人的信息
分享網(wǎng)址:http://jinyejixie.com/article34/ghhjpe.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供網(wǎng)站制作品牌網(wǎng)站建設(shè)、自適應(yīng)網(wǎng)站、網(wǎng)站設(shè)計(jì)、品牌網(wǎng)站制作、外貿(mào)建站

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來源: 創(chuàng)新互聯(lián)

成都定制網(wǎng)站網(wǎng)頁(yè)設(shè)計(jì)
黔江区| 长春市| 拉孜县| 刚察县| 无为县| 汉阴县| 眉山市| 合江县| 安福县| 夏邑县| 星子县| 涿鹿县| 托克逊县| 茌平县| 永康市| 苏尼特右旗| 洪湖市| 星子县| 恭城| 阳朔县| 泰兴市| 秀山| 沁阳市| 化德县| 祁东县| 平泉县| 乌兰察布市| 镇原县| 巴彦县| 孟连| 白山市| 闸北区| 开阳县| 额济纳旗| 汝州市| 南溪县| 买车| 梅河口市| 辽源市| 庆阳市| 沂源县|