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

首頁 > 系統 > Android > 正文

Android使用Intent獲取聯系人信息

2019-12-12 03:16:38
字體:
來源:轉載
供稿:網友

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(); } }

以上就是獲取全部聯系人數據,如果需要單個聯系人的詳細數據的話,就按照獲取所有聯系人的參數自行修改就可以了。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 浑源县| 阜南县| 伊宁县| 尉犁县| 正蓝旗| 五指山市| 湘乡市| 彭水| 原阳县| 佛坪县| 青浦区| 新绛县| 会理县| 玉门市| 黄骅市| 宝坻区| 汕尾市| 扎赉特旗| 凌云县| 富锦市| 乐安县| 惠水县| 兰考县| 五河县| 东平县| 泌阳县| 抚顺县| 灵台县| 土默特左旗| 阿拉尔市| 图们市| 咸丰县| 株洲市| 花莲县| 晋宁县| 斗六市| 瑞丽市| 巢湖市| 商丘市| 利川市| 浦东新区|