最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Android使用Intent獲取聯(lián)系人信息

 更新時間:2017年03月27日 10:39:06   作者:我勒個茜  
這篇文章主要為大家詳細(xì)介紹了Android Intent的使用方法,Android如何獲取聯(lián)系人信息,具有一定的參考價值,感興趣的小伙伴們可以參考一下

Intent的使用

趁著工作之余,看了一下intent,發(fā)現(xiàn)好多知識都已經(jīng)忘記了,然后自己有重新復(fù)習(xí)了一遍,在這里做一下筆記,以下為自己總結(jié)的幾點:

  • intent是一個好東西
  • 他可以啟動Activity還可以回調(diào)數(shù)據(jù)
  • 調(diào)用各種數(shù)據(jù),聯(lián)系人等等
  • 進程之間可以接收同一個intent
  • 三大組件的橋梁

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

Intent使用的時候需要定義一個action和data,action就是他要執(zhí)行的動作,data就是他所執(zhí)行動作的數(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)頁

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


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

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

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

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

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

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

注意了,因為聯(lián)系人內(nèi)容是敏感權(quán)限,6.0以上的要動態(tài)授權(quán),并自Manifest文件中添加讀取手機聯(lián)系人的權(quán)限。

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

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

public static final int PICK_CONTACT_REQUEST = 1;

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

 @Override
 protected void onActivityResult(int requestCode, int resultCode, Intent data) {
 if (requestCode == 1) {
  if (resultCode == RESULT_OK) {
  Uri contactUri = data.getData();
  //如果需要別的信息,就在這里添加參數(shù)
  String[] projection = {ContactsContract.CommonDataKinds.Phone.NUMBER};
  Cursor cursor = getContentResolver()
   .query(contactUri, projection, null, null, null);
  //將游標(biāo)移動到第一行
  cursor.moveToFirst();
  //返回列名對應(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;
 // 獲取手機聯(lián)系人
 Cursor phoneCursor = resolver.query(uri, projection, null, null, null);
 if (phoneCursor != null) {
  while (phoneCursor.moveToNext()) {
  //得到手機號碼
  String phoneNumber = phoneCursor.getString(PHONES_NUMBER_INDEX);
  //當(dāng)手機號碼為空的或者為空字段 跳過當(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è)置頭像則給他一個默認(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();
 }
 }

以上就是獲取全部聯(lián)系人數(shù)據(jù),如果需要單個聯(lián)系人的詳細(xì)數(shù)據(jù)的話,就按照獲取所有聯(lián)系人的參數(shù)自行修改就可以了。

相關(guān)文章

  • Android RecyclerView上拉加載和下拉刷新(基礎(chǔ)版)

    Android RecyclerView上拉加載和下拉刷新(基礎(chǔ)版)

    這篇文章主要為大家詳細(xì)介紹了Android RecyclerView上拉加載和下拉刷新的相實現(xiàn)方法,內(nèi)容簡單,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2017-02-02
  • Kotlin基礎(chǔ)學(xué)習(xí)之位運算

    Kotlin基礎(chǔ)學(xué)習(xí)之位運算

    一提起位運算,人們往往想到它的高效性,無論是嵌入式編程還是優(yōu)化系統(tǒng)的核心代碼,適當(dāng)?shù)倪\用位運算總是一種迷人的手段,下面這篇文章主要給大家介紹了關(guān)于Kotlin基礎(chǔ)學(xué)習(xí)之位運算的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),需要的朋友可以參考下。
    2017-11-11
  • Android?Jetpack組件ViewModel基本用法詳解

    Android?Jetpack組件ViewModel基本用法詳解

    這篇文章主要為大家介紹了Android?Jetpack組件ViewModel基本用法詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2023-01-01
  • 詳解Android文件描述符

    詳解Android文件描述符

    這篇文章主要介紹了詳解Android 文件描述符,對Android、Linux源碼感興趣的同學(xué),要著重看一下
    2021-04-04
  • Android OkHttp的簡單使用和封裝詳解

    Android OkHttp的簡單使用和封裝詳解

    這篇文章主要介紹了Android OkHttp的簡單使用和封裝詳解的相關(guān)資料,Android OKHttp的簡單get、post的使用,再到它的封裝,需要的朋友可以參考下
    2016-12-12
  • 淺析Android整合OKHttp與Gson實例

    淺析Android整合OKHttp與Gson實例

    Gson 是一個 Java 庫,可用于將 Java 對象轉(zhuǎn)換為其 JSON 表示形式。它還可用于將 JSON 字符串轉(zhuǎn)換為等效的 Java 對象。Gson 可以使用任意 Java 對象,包括您沒有源代碼的預(yù)先存在的對象
    2023-01-01
  • Kotlin可見性修飾符詳解

    Kotlin可見性修飾符詳解

    本文詳細(xì)講解了Kotlin可見性修飾符,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2021-11-11
  • android TextView屬性的詳細(xì)介紹 分享

    android TextView屬性的詳細(xì)介紹 分享

    android TextView屬性的詳細(xì)介紹 分享,需要的朋友可以參考一下
    2013-05-05
  • android 獲取本機的IP地址和mac物理地址的實現(xiàn)方法

    android 獲取本機的IP地址和mac物理地址的實現(xiàn)方法

    本文主要介紹android 獲取本機的IP地址和mac物理地址的實現(xiàn)方法,這里提供示例代碼,實現(xiàn)功能,有需要的小伙伴可以參考下
    2016-09-09
  • 25個實用酷炫的Android開源UI框架

    25個實用酷炫的Android開源UI框架

    本文為大家分享了25個實用酷炫的Android開源UI框架,靈活運用這些UI框架可在日常工作中節(jié)省不少時間
    2018-04-04

最新評論

汕尾市| 延津县| 湛江市| 河源市| 德化县| 远安县| 南丹县| 焦作市| 三门县| 沿河| 徐州市| 溆浦县| 东台市| 义乌市| 额尔古纳市| 台中市| 涿州市| 洛浦县| 昌平区| 当雄县| 宿迁市| 长寿区| 阳泉市| 湛江市| 肃南| 洛川县| 全州县| 义乌市| 荆门市| 科技| 砚山县| 买车| 平邑县| 历史| 泗阳县| 南阳市| 吴川市| 皋兰县| 荣成市| 道孚县| 阿坝县|