一起Talk Android吧(第二百三十四回:Android中的數據存儲之ContentProvider二)

各位看官們大家好,上一回中咱們說的是Android中數據存儲之ContentProvider的例子,這一回咱們繼續說該例子。閒話休提,言歸正轉。讓我們一起Talk Android吧!

看官們,我們在上一回中介紹瞭如何通過ContentProvider讀取聯繫人模塊中的數據,下面是完整的代碼,請大家參考:

package com.example.talk8.blogappall;

import android.Manifest;
import android.content.pm.PackageManager;
import android.database.Cursor;
import android.provider.ContactsContract;
import android.support.annotation.NonNull;
import android.support.v4.app.ActivityCompat;
import android.support.v4.content.ContextCompat;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.util.Log;
import android.widget.Button;
import android.widget.TextView;
import android.widget.Toast;

public class ActivityContentProvider extends AppCompatActivity {
    private static final String TAG = "DataStorage";

    private Button mReadContact;
    private TextView mName;
    private TextView mPhone;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_content_provider);

        mReadContact = (Button)findViewById(R.id.read_contact);
        mName = (TextView)findViewById(R.id.name_contact);
        mPhone = (TextView)findViewById(R.id.phone_contact);

        mReadContact.setOnClickListener(v -> CheckPermisson());
    }

    //通過ContentProvider讀取聯繫人中數據
    public void ReadContact() {
        Cursor cursor = null;
        Log.i(TAG, "ReadContact: ");
        try {
            cursor = getContentResolver().query(
            ContactsContract.CommonDataKinds.Phone.CONTENT_URI,null , null, null);
            if(cursor != null) {
                while (cursor.moveToNext()) {
                    Log.i(TAG, "ReadContact: get Cursor");
                    String name = cursor.getString(cursor.getColumnIndex(
                    ContactsContract.CommonDataKinds.Phone.DISPLAY_NAME));
                    String number = cursor.getString(
                    cursor.getColumnIndex(
                    ContactsContract.CommonDataKinds.Phone.NUMBER));
                    mName.setText("Name: "+name);
                    mPhone.setText("PhoneNumber: "+number);
                }
            }
        }catch (Exception e) {
            Log.i(TAG, "ReadContact:  Exception");
            e.printStackTrace();
        }finally {
            if(cursor != null) {
                cursor.close();
            }
        }
    }

    //訪問聯繫人需要進行權限申請,而且manifest文件中也需要添加權限
    private void CheckPermisson() {
        if (ContextCompat.checkSelfPermission(this, Manifest.permission.READ_CONTACTS)
                != PackageManager.PERMISSION_GRANTED) {
            Log.i(TAG, "CheckPermisson: ");
            ActivityCompat.requestPermissions(this, new String[]
            {Manifest.permission.READ_CONTACTS}, 1);
        }else {
            Log.i(TAG, "CheckPermisson:  permission is ok");
            ReadContact();
        }
    }

    //用戶選擇權限後,依據用戶選擇來讀取數據
    @Override
    public void onRequestPermissionsResult(int requestCode, 
    @NonNull String[] permissions, @NonNull int[] grantResults) {
        super.onRequestPermissionsResult(requestCode, permissions, grantResults);
        switch (requestCode) {
            case 1:
                if(grantResults.length > 0 && 
                grantResults[0] == PackageManager.PERMISSION_GRANTED) {
                    Log.i(TAG, "onRequestPermissionsResult: Permisson Approved");
                    ReadContact();
                }else {
                    Log.i(TAG, "onRequestPermissionsResult: Permisson Rejected");
                    Toast.makeText(this, "Read Contact Permisssion denied", 
                    Toast.LENGTH_LONG);
                }
            default:
                break;
        }
    }
}

在代碼中,我們創建了一個Button並且給它設置了監聽器,通過它來讀取聯繫人中數據。在讀取聯繫人數據時需要申請權限,當獲得用戶允許使用聯繫人權限後纔可以讀取其中的數據。

程序中我們把讀取的數據通過TextView控件展示到了用戶界面上。我在這裏就演示程序運行結果了,請大家自己動手來實踐。

各位看官,關於Android中數據存儲之ContentProvider的例子咱們就介紹到這裏,欲知後面還有什麼例子,且聽下回分解!

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章