1. 程式人生 > >基於Android studio的手機聯絡人資訊獲取

基於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"> <TextView
android: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 studioandroid環境搭建

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