基於Android studio的手機聯絡人資訊獲取
最近需要做到這麼一個功能,獲取聯絡人資訊,並且將聯絡人姓名和電話顯示到螢幕上,上網查了很多資料,折騰了很久才做出來,特此寫下感想。
程式碼原理不多講,度娘一大堆,在貼程式碼之前想說一下過程中容易忽略的地方:
1.新增執行時許可權,很多時候我們往往只在清單裡面新增如下許可權,然而在android6之後需要新增執行時許可權,否則照樣無法執行。
<uses-permission android:name="android.permission.READ_CONTACTS" /> <uses-permission android:name="android.permission.READ_PHONE_STATE"/> <uses-permission android:name="android.permission.WRITE_CONTACTS" />
2.本想通過ImageView設定點選事件,結果出現了問題,還是換成了Button
下面是完整程式碼:
XML:
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" android:background="@drawable/background" android:orientation="vertical"> <LinearLayout android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_marginTop="110dp" android:orientation="horizontal" android:layout_gravity="center_horizontal"> <TextViewandroid:id="@+id/welcome" android:layout_width="wrap_content" android:layout_height="48dp" android:layout_below="@+id/linearLayout" android:text="設定求助人資訊" android:textColor="#000000" android:textSize="27dp" /> <Button android:id="@+id/getContacts" android:layout_width="wrap_content" android:layout_height="wrap_content" android:background="#00000000" android:text="(匯入)" android:textColor="#3180e1" android:textSize="27dp" /> </LinearLayout> <LinearLayout android:id="@+id/linearLayout_name" android:layout_width="match_parent" android:layout_height="wrap_content" android:orientation="horizontal" android:layout_marginTop="55dp"> <ImageView android:id="@+id/image_name" android:layout_width="97dp" android:layout_height="40dp" android:src="@drawable/name" /> <EditText android:id="@+id/user_name" android:layout_width="287dp" android:layout_height="wrap_content" android:hint="請輸入姓名" android:textSize="30dp" android:background="@null"/> </LinearLayout> <LinearLayout android:id="@+id/linearLayout_phone" android:layout_width="match_parent" android:layout_height="wrap_content" android:orientation="horizontal" android:layout_marginTop="30dp"> <ImageView android:id="@+id/image_phone" android:layout_width="97dp" android:layout_height="40dp" android:src="@drawable/phone" /> <EditText android:id="@+id/user_phone" android:layout_width="287dp" android:layout_height="wrap_content" android:hint="請輸入電話" android:textSize="30dp" android:background="@null"/> </LinearLayout> <Button android:id="@+id/save_user_info" android:layout_width="340dp" android:layout_height="wrap_content" android:layout_centerHorizontal="true" android:layout_gravity="center_horizontal" android:layout_marginTop="70dp" android:background="#3180e1" android:text="儲存並開始" android:textColor="#fdfdfd" android:textSize="25dp" /> </LinearLayout>
主活動程式碼(本人的活動名稱為ThirdActivity):
package com.example.administrator; import android.Manifest; import android.app.Activity; import android.content.ContentResolver; import android.content.Intent; import android.content.pm.PackageManager; import android.database.Cursor; import android.net.Uri; import android.provider.ContactsContract; import android.support.v4.app.ActivityCompat; import android.support.v4.content.ContextCompat; import android.support.v7.app.AppCompatActivity; import android.os.Bundle; import android.view.View; import android.widget.Button; import android.widget.EditText; import android.widget.ImageView; import android.widget.Toast; public class ThirdActivity extends AppCompatActivity { private Button save_user_info;//保留聯絡人資訊 private EditText user_name;//編輯姓名 private EditText user_phone;//編輯電話 private Button getContacts; private String username , usernumber;//呼叫聯絡人返回姓名和電話 @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_third); //初始化 save_user_info = findViewById(R.id.save_user_info); user_name = findViewById(R.id.user_name); user_phone = findViewById(R.id.user_phone); getContacts = findViewById(R.id.getContacts); //執行時許可權 if (ContextCompat.checkSelfPermission(ThirdActivity.this, Manifest.permission.READ_CONTACTS) != PackageManager.PERMISSION_GRANTED) { ActivityCompat.requestPermissions(ThirdActivity.this, new String[]{ Manifest.permission.READ_CONTACTS}, 1); } if (ContextCompat.checkSelfPermission(ThirdActivity.this, Manifest.permission.READ_CONTACTS) != PackageManager.PERMISSION_GRANTED) { ActivityCompat.requestPermissions(ThirdActivity.this, new String[]{ Manifest.permission.READ_CONTACTS}, 1); } else { getContacts.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { //呼叫選擇聯絡人介面 startActivityForResult(new Intent(Intent.ACTION_PICK, ContactsContract.Contacts.CONTENT_URI), 0); } }); } //點選儲存資訊 save_user_info.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { String helper_name = user_name.getText().toString(); String helper_phone = user_phone.getText().toString(); if (helper_name.isEmpty()&& helper_phone.isEmpty()){ Toast.makeText(ThirdActivity.this,"聯絡人資訊不能為空",Toast.LENGTH_SHORT).show(); } else { Intent intent = new Intent(ThirdActivity.this,ForthActivity.class); intent.putExtra("helper_name",helper_name); intent.putExtra("helper_phone",helper_phone); startActivity(intent); finish(); } } }); } //呼叫聯絡人資訊,返回姓名和電話,顯示在EditText中 @Override protected void onActivityResult(int requestCode, int resultCode, Intent data) { super.onActivityResult(requestCode, resultCode, data); if (resultCode == Activity.RESULT_OK) { // ContentProvider展示資料類似一個單個數據庫表 // ContentResolver例項帶的方法可實現找到指定的ContentProvider並獲取到ContentProvider的資料 ContentResolver reContentResolverol = getContentResolver(); // URI,每個ContentProvider定義一個唯一的公開的URI,用於指定到它的資料集 Uri contactData = data.getData(); // 查詢就是輸入URI等引數,其中URI是必須的,其他是可選的,如果系統能找到URI對應的ContentProvider將返回一個Cursor物件. Cursor cursor = managedQuery(contactData, null, null, null, null); cursor.moveToFirst(); // 獲得DATA表中的名字 username = cursor.getString(cursor .getColumnIndex(ContactsContract.Contacts.DISPLAY_NAME)); // 條件為聯絡人ID String contactId = cursor.getString(cursor .getColumnIndex(ContactsContract.Contacts._ID)); // 獲得DATA表中的電話號碼,條件為聯絡人ID,因為手機號碼可能會有多個 Cursor phone = reContentResolverol.query( ContactsContract.CommonDataKinds.Phone.CONTENT_URI, null, ContactsContract.CommonDataKinds.Phone.CONTACT_ID + " = " + contactId, null, null); while (phone.moveToNext()) { usernumber = phone .getString(phone .getColumnIndex(ContactsContract.CommonDataKinds.Phone.NUMBER)); //顯示資訊 user_name.setText(username); user_phone.setText(usernumber); } } } }親測可用,歡迎指正和交流!
相關推薦
基於Android studio的手機聯絡人資訊獲取
最近需要做到這麼一個功能,獲取聯絡人資訊,並且將聯絡人姓名和電話顯示到螢幕上,上網查了很多資料,折騰了很久才做出來,特此寫下感想。程式碼原理不多講,度娘一大堆,在貼程式碼之前想說一下過程中容易忽略的地方:1.新增執行時許可權,很多時候我們往往只在清單裡面新增如下許可權,然而在
Android ContentResolver ContactsContract 獲取手機聯絡人資訊
獲取手機聯絡人資訊步驟: 1、獲取 ContentResolver ContentResolver resolver = getContentResolver(); 2、resolver.query(*)查詢資訊 查詢手機聯絡人的URI:Cont
Android 獲取手機聯絡人資訊
<span style="font-size:18px;"> // 訪問聯絡人的姓名+電話 private Uri uri = ContactsContract.CommonDataKinds.Phone.CONTENT_URI; private Strin
獲取手機聯絡人資訊 很簡單的方法
String a; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.la
[原始碼和文件分享]基於Android Studio實現的論壇網站Android客戶端和JAVA EE後臺
第一章 概述 1.1 開發環境 本安卓程式在Windows 10系統下使用Android Studio開發,後臺使用MyEclipse開發,測試環境為安卓系統5.1、4.4、4.3、5.0,螢幕尺寸5.0、5.1、5.5的安卓手機。 1.2 安裝配置 本安卓程式要求安卓SDK為API
基於android studio的android環境搭建
Android Studio是Google官方主推開發Android的IDE,雖然Eclipse開發Android沒有任何問題但是Google已經對Eclipse不進行更新
基於Hive的手機應用資訊統計分析系統
目錄 專案概要 具體實現 HIVE查詢 專案概要 需求 手機應用日誌 定期離線分析手機應用新增使用者、活躍使用者、沉默使用者、啟動次數、版本分佈和留存使用者等業務指標。 工作流程 手機APP啟動時,上報啟動日誌、錯誤日誌、頁面日誌、事件日誌、使用時長日誌等資訊到日誌收集伺
OCR 圖片識別 Tesseract基於Android Studio的示例演示搭建
前言:之前在外包網站看到身份證識別和車牌號的識別的需求,立馬就想到了OCR技術。國內三巨頭BAT的雲端計算都提供了OCR技術服務,但他們的API大都收費;如何自己實現OCR呢?google開源的Tesseract就是今天的主題,tess-two是Tesseract在Android上的應用
react-native 安裝與環境配置(踩坑版,基於android studio)
一.安裝java環境 先去官網下載最近java 8版本,並進行安裝,注意:java 8之前的版本是不支援react native的,必須使用java 8,下載連結接:java jdk,下載完成之後進行環境變數配置,可以參考此連結進行配置,網頁:java8 環境變數配置,至
淺談android中手機聯絡人字母索引表的實現
實際上字母索引表的效果,可以說在現在的眾多APP中使用的非常流行,比如支付寶,微信中的聯絡人,還有購物,買票的APP中選擇全國城市,切換城市的時候,這時候的城市也就是按照一個字母索引的順序來顯示,看起來是很方便的.其實這種字母索引表的效果最開始是出現在微信的聯絡人中.因為覺
《ArcGIS Runtime SDK for Android開發筆記》——(6)、基於Android Studio的ArcGIS Android工程結構解析
1、前言 Android Studio 是第一個Google官方的 Android 開發環境。其他工具,例如 Eclipse,在 Android Studio 釋出之前已經有了大規模的使用。為了幫助開發者轉向 Android Studio,谷歌已經寫出一套遷移指南。Google 同時也釋出宣告稱,在接下來的
Android 程式碼混淆(基於Android Studio)
一、前言 今天要打包新產品,突然忘了混淆的引數是怎麼寫的了,雖然之前也混淆過,可是具體配置的引數程式碼有些記不起來了,因此決定花點時間寫篇部落格記錄一下,方便以後查詢和自己的記憶。 二、Android Studio 程式碼混淆基本配置 在工程目錄下,找到 progu
解決android studio錯誤提示資訊亂碼問題
android studio在編譯過程中,如果出現錯誤會在messages介面給出提示,但是有的時候會出現亂碼的問題。 導致根本看不出來是什麼問題。這時候只要做以下設定就能解決亂碼問題,IDE也會將出現的錯誤清晰的展現在你面前 解決辦法如下: 選擇如下
Android APP基於Android Studio多版本構建實戰
關於多版本構建,我們可以通過buildTypes來新增構建型別,一般而言這裡也不需要自行定義,預設會生成debug和release兩種型別。 重點在於使用productFlavors生成不同“風味”的版本,我們可以構建標準版和中性版APP,這在企業應用中非常普
Android Studio中 Logcat資訊級別分類及設定步驟
Logcat資訊分為好幾個級別,分別是:Assert(斷言)、Debug(除錯)、Error(錯誤)、Info(資訊)、Verbose(詳細)、Warning(警告)。 1. [V]:詳細(Verbo
在 Windows 上搭建基於Android Studio 3.2 的 Flutter 開發環境
路徑 ive http resolve 你是 arc 文件夾 mar 創建 1、安裝和配置好Android Studio 3.2 (Android Studio 的安裝路徑為:D:\Android\Android Studio;Android SDK路徑為:D:\Andro
eclipse,android studio 簽名打包,獲取MD5, SHA1(應用的簽名)
引入: (1)專案的收官階段,我們比用到的簽名,打包,上傳應用商店。。。 (2)在開發的中途接入第三方的sdk時候經常需要我們的簽名的md5去獲取相應的appID(比如微信分享,登陸需要專案的應用簽名
基於Android Studio的記憶體洩漏檢測與解決全攻略
自從Google在2013年釋出了Android Studio後,Android Studio憑藉著自己良好的記憶體優化,酷炫的UI主題,強大的自動補全提示以及Gradle的編譯支援正逐步取代Eclipse,成為主流的Android開發IDE。Android Studio在
android studio for android learning (十二) 檢視並獲取聯絡人資訊
1.點選一個按鈕就會顯示系統的聯絡人列表,當用戶點選聯絡人之後就會看到詳細的名字和電話。 2.具體的程式碼如下:首先在AndroidManifest.xml檔案中配置使用者許可權。 <uses-permission android:name="a
Android 獲取手機儲存資訊詳解(記憶體,外存等)
ActivityManager am = (ActivityManager) getSystemService(Context.ACTIVITY_SERVICE); //系統記憶體資訊 ActivityManager.MemoryInfo memInfo = new ActivityManager