各位看官们大家好,上一回中咱们说的是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的例子咱们就介绍到这里,欲知后面还有什么例子,且听下回分解!