1. 程式人生 > >Android寫入聯絡人

Android寫入聯絡人

獲取寫入的許可權

在AndroidManifest.xml中新增下面這句請求許可權

在activity頁面直接利用try,catch寫入聯絡人


     try {
            insertConstacts();
        } catch (Exception e) {
            getWrieteConstactsPermission();
        }
  • insertConstacts()方法如下:

    public void insertConstacts() {

        ContentValues values = new
ContentValues(); Uri rawContactUri = mContext.getContentResolver().insert( ContactsContract.RawContacts.CONTENT_URI, values);//EPApplication是我定義的Application的子類,getContextObject方法返回的是context long rawContactId = ContentUris.parseId(rawContactUri); // 表插入姓名資料 values.clear(); values.put(ContactsContract.Data.RAW_CONTACT_ID, rawContactId); values.put(ContactsContract.Data.MIMETYPE, ContactsContract.CommonDataKinds.StructuredName.CONTENT_ITEM_TYPE);// 內容型別
values.put(ContactsContract.CommonDataKinds.StructuredName.GIVEN_NAME, "維拉報警電話"); mContext.getContentResolver().insert(ContactsContract.Data.CONTENT_URI, values); //寫入電話 values.clear(); values.put(ContactsContract.Data.RAW_CONTACT_ID, rawContactId); values.put(ContactsContract.Data.MIMETYPE, ContactsContract.CommonDataKinds.Phone.CONTENT_ITEM_TYPE); values.put(ContactsContract.CommonDataKinds.Phone.NUMBER, "95213176"
); values.put(ContactsContract.CommonDataKinds.Phone.TYPE, ContactsContract.CommonDataKinds.Phone.TYPE_MOBILE); mContext.getContentResolver().insert(android.provider.ContactsContract.Data.CONTENT_URI, values); //寫入頭像 Bitmap bitmap = BitmapFactory.decodeResource(mContext.getResources(), R.mipmap.ic_launcher); ByteArrayOutputStream out = new ByteArrayOutputStream(); bitmap.compress(Bitmap.CompressFormat.PNG, 100, out); try { out.flush(); out.close(); } catch (IOException e) { e.printStackTrace(); } values.clear(); values.put(ContactsContract.Data.RAW_CONTACT_ID, rawContactId); values.put(ContactsContract.Data.MIMETYPE, ContactsContract.CommonDataKinds.Photo.CONTENT_ITEM_TYPE); values.put(ContactsContract.CommonDataKinds.Photo.PHOTO, out.toByteArray()); mContext.getContentResolver().insert(ContactsContract.Data.CONTENT_URI, values); }
  • 最開始會因為沒有許可權而進入catch,會執行的是getWrieteConstactsPermission()方法,此方法主要是申請許可權和呼叫onRequestPermissionsResult()回撥。
    來看一下getWrieteConstactsPermission()方法:

    private void getWrieteConstactsPermission() {
        if (ContextCompat.checkSelfPermission(mContext, android.Manifest.permission.WRITE_CONTACTS) != PackageManager.PERMISSION_GRANTED){
            if (ActivityCompat.shouldShowRequestPermissionRationale(mActivity,
                    android.Manifest.permission.WRITE_CONTACTS)){
               new AlertDialog.Builder(mContext).setTitle("維拉將獲取寫入聯絡人許可權").setPositiveButton("接受", (dialog, which) -> ActivityCompat.requestPermissions(mActivity,
                       new String[]{android.Manifest.permission.WRITE_CONTACTS},
                       WRITE_PERMISSION_REQUEST)).setNegativeButton("拒絕", (dialog, which) -> Toast.makeText(mContext, "使用者拒絕獲取聯絡人許可權!", Toast.LENGTH_SHORT).show()).show();
            }else {
                ActivityCompat.requestPermissions(mActivity,
                        new String[]{android.Manifest.permission.WRITE_CONTACTS},
                        WRITE_PERMISSION_REQUEST);
            }
        }
    }
  • 當用戶允許獲取寫入許可權,WRITE_PERMISSION_REQUEST是個整型資料,作為onRequestPermissionsResult()的requestCode。

    • 所以在activity中需要重寫onRequestPermissionsResult()方法。

    @Override
    public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {
        super.onRequestPermissionsResult(requestCode, permissions, grantResults);
        Log.i("lgq","requestCode:" + requestCode);
        if(requestCode == ConstactsUtils.WRITE_PERMISSION_REQUEST){
            if (grantResults.length > 0 && grantResults[0] == PackageManager.PERMISSION_GRANTED) {
                constacts.insertConstacts();
            }
        }
    }
  • 看出來了把,此處呼叫了insertConstacts()方法,也就是申請到許可權後立馬寫入聯絡人,ok!到此就可以結束了。

打卡收工!!

相關推薦

Android寫入聯絡人

獲取寫入的許可權 在AndroidManifest.xml中新增下面這句請求許可權 在activity頁面直接利用try,catch寫入聯絡人 try { insertConstacts();

Android聯絡人的操作(讀取和寫入聯絡人)

瞭解了ContentProvider之後,我們可以嘗試來操作手機中的聯絡人。 這個操作是非常常用的,那麼首先我們要了解聯絡人在手機資料庫中是如何儲存的。 聯絡人中,有三張表比較關鍵raw_contact,data.minetype. 下面的程式碼則是讀取和寫入聯絡人。

Android VCard聯絡人備份恢復(匯入/匯出)詳解

原文地址為: Android VCard聯絡人備份恢復(匯入/匯出)詳解 首先我們簡單的看下在Android中聯絡人的儲存結構. 工作環境:android 2.3.3聯絡人的主要資料存放在raw_contacts和data表裡,它兩構成主從表關係。 raw_contacts表結構

Android系統聯絡人全特效實現 下 ,字母表快速滾動

                在上一篇文章中,我和大家一起實現了類似於Android系統聯絡人的分組導航和擠壓動畫功能,不過既然文章名叫做《Android系統聯絡人全特效實現》,那麼沒有快速滾動功能顯然是稱不上"全"的。因此本篇文章我將帶領大家在上篇文章的程式碼基礎上改進,加入快速滾動功能。其實ListVi

如何獲取android手機聯絡人並按字母展示(三)

如果獲取contact的頭像資訊並展示: 如何根據photoId來獲取bitmap: public static Bitmap getContactPhoto(Context context, long photoId, BitmapFactory.Options opti

Android 獲取聯絡人姓名與電話號碼

許可權 <uses-permission android:name="android.permission.READ_CONTACTS" /> 跳轉通訊錄介面 findViewById(R.id.btn_select_contact).setOnClickListe

Android 獲得聯絡人並排序

方式一:通過觀察匯出的聯絡人資料庫的相關欄位,根據欄位去查詢(在有些手機上會查詢不全,並且該類沒有實現排序) import android.content.Context; import android.database.Cursor; import android.net

Android聯絡人相應介面顯示運營商名稱

在“要顯示的聯絡人”介面顯示運營商名稱 修改方法:ContactsCommon/src/com/android/contacts/common/list/ContactListFilterView.java case ContactListFil

如何獲取android手機聯絡人並按字母展示

安卓如何讀取聯絡人不加read_contacts和write_contacts,會有以下的報錯 12-10 11:14:42.971 1079-1107/? W/ActivityManager: Permission Denial: opening provider com.android.pr

Android 獲取聯絡人列表

首先,先看看執行效果 1.增加許可權 <!-- 讀取聯絡人許可權 --> <uses-permission android:name="android.permission.READ_CONTACTS"/>

Android新增聯絡人資訊並讀取

package com.example.cxy.androidcontact; import android.content.Intent; import android.support.v7.app.AppCompatActivity; import android.os.Bundle; import

實現一個android撥號聯絡人

工作之餘搗鼓了一個類似安卓聯絡人的小應用,記錄一下。 能夠匯入手機上的聯絡人並按拼音首字母排序,實現字母的索引。 有的演算法很笨很麻煩,還得加油。 實現效果如下: 首先定義一個PeopleLoader類,用來讀取聯絡人相關的姓名、電話: public class

Android 編輯聯絡人,增、刪、改程式碼

最近的一個小專案有一個新增聯絡人的功能,到網上找了些資料,最後解決問題。 在此分享,其中有一個小小的問題,順帶分享解決方法。 增刪改程式碼 刪除 private void delContact(Context context, String name) { Cursor

Android聯絡人的資訊傳遞到自帶新建聯

我在做一個專案時,遇到了一個需求,我做的是中國移動的一卡多號專案。就是在一卡多號中的某個副號下面我新建了一個聯絡人這個聯絡人不儲存到系統中。那麼我點選某個聯絡人客戶希望將此聯絡人新增到系統手機通訊錄中並且希望可以編輯此聯絡人的資訊。那麼我就想辦法將此聯絡人的資訊傳遞給系統自帶的新建聯絡人介面中去。我查看了C

操作Android聯絡人,通話記錄,短息,的URI,和具體的查詢語句,欄位註解。(根據自己需求)

讀取簡訊的URI:     /**      * 所有的簡訊      */       public static final String SMS_URI_ALL = "content://sms/";       /**      * 收件箱簡訊      */       public sta

Android 仿聯絡人字母索引

public class QuickIndexView extends View {private static final char[] LETTER = Cheeses.LETTERS;/** 字元變更的監聽器 */public interface OnLetterChangedListener {voi

Android管理聯絡人(包含新增,查詢,修改和刪除;以及不同版本區別)

通過Android系統提供的介面,可以很方便的管理聯絡人資訊。一、新增1、新增聯絡人1.6上的程式碼:String peopleName = "name";ContentValues personValues = new ContentValues();// namepers

Android讀取聯絡人的姓名及電話號碼

Android中聯絡人的資訊是通過ContentProvider來供外部應用獲取的,我們使用時只需根據系統聯絡人ContentProvider的Uri即可獲取所需資料。下面講解如何獲取聯絡人的姓名及電話號碼,別的資料如郵箱、照片等資料的獲取都可使用此方式。

android檢視聯絡人姓名和手機號碼

第一步:佈局檔案就是一個Button,點選彈出聯絡人列表,選擇聯絡人後將聯絡人的資訊顯示在兩個TextView上,佈局程式碼很簡單,此處不再給出。 第二步:調到聯絡人選擇頁面並返回所選擇的聯絡人資訊可以用Intent來是實現,關鍵程式碼為: Intent intent =

android聯絡人搜尋框

在開發中經常用到獲取聯絡人和搜尋框,今天總結一下。 執行效果圖: 1、在Activity中做呼叫,得到聯絡人,對EditText設定監聽。 public class MainActivity extends Activity imple