各位看官們大家好,上一回中咱們說的是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的例子咱們就介紹到這裏,欲知後面還有什麼例子,且聽下回分解!