Contentprovier trong android

ContentProvier trong android bao gồm 2 loại chính là android platform provider và custom content provider

Trong ví dụ này mình sẽ giới thiệu với các bạn cách sử dụng android platform provider tức là các provider do hệ điều hành cung cấp như: đọc danh bạ, lịch sử cuộc gọi hoặc danh sách các bài hát…

Để làm rõ vấn đề này mình làm 1 app đơn giản với 3 button khi click vào từng button mình sẽ log ra danh bạ, lịch sử cuộc gọi và danh sách các bài hát trong máy của mình và ghi kết quả ra logcat. Các bạn có thể nghiên cứu các provider khác tương tự theo link api

http://developer.android.com/reference/android/provider/package-summary.html

Để làm ví dụ này các bạn cần thực hiện theo các bước sau

Bước 1: mở file res->value->Strings.xml

<resources>



<string name="app_name">UseContentProviderAndroid</string>



<string name="getAllContacts">Get All Contacts</string>



<string name="getAllMusic">Get All Music</string>



<string name="getAllCallLogs">Get All Call Logs</string>



</resources>

Bước 2: mở file res->layout->layout_mainactivity.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:orientation="vertical"



android:paddingLeft="10dp"



android:paddingRight="10dp"



android:paddingTop="20dp" >



<Button



android:id="@+id/btgetAllContacts"



android:layout_width="fill_parent"



android:layout_height="wrap_content"



android:text="@string/getAllContacts" />





<Button



android:id="@+id/btgetAllMusic"



android:layout_width="fill_parent"



android:layout_height="wrap_content"



android:text="@string/getAllMusic" />





<Button



android:id="@+id/btgetAllCallLogs"



android:layout_width="fill_parent"



android:layout_height="wrap_content"



android:text="@string/getAllCallLogs" />





</LinearLayout>

Bước  3 mở file AndroidManifest.xml

<manifest xmlns:android="http://schemas.android.com/apk/res/android"



package="truongbs.fet.hut.usecontentprovider"



android:versionCode="1"



android:versionName="1.0" >





<uses-sdk



android:minSdkVersion="8"



android:targetSdkVersion="19" />





<uses-permission android:name="android.permission.READ_CONTACTS" />



<uses-permission android:name="android.permission.READ_CALL_LOG"/>



<application



android:allowBackup="true"



android:icon="@drawable/ic_launcher"



android:label="@string/app_name"



android:theme="@style/AppTheme" >



<activity android:name=".MainActivity" >



<intent-filter>



<category android:name="android.intent.category.LAUNCHER" />





<action android:name="android.intent.action.MAIN" />



</intent-filter>



</activity>



</application>





</manifest>

Note: đ đc được danh b các bn cn khai báo quyn

<uses-permission android:name=”android.permission.READ_CONTACTS” />

Đ đc được lch s cuc gi bn cn khai báo quyn

    <uses-permission android:name=”android.permission.READ_CALL_LOG”/>

 

Bước 4: mở file MainActivity.java

package truongbs.fet.hut.usecontentprovider;





import java.util.Date;





import android.app.Activity;



import android.content.ContentResolver;



import android.database.Cursor;



import android.os.Bundle;



import android.provider.CallLog;



import android.provider.ContactsContract;



import android.provider.MediaStore;



import android.util.Log;



import android.view.View;



import android.view.View.OnClickListener;



import android.widget.Button;





//http://developer.android.com/reference/android/provider/package-summary.html





public class MainActivity extends Activity implements OnClickListener {



private Button btgetAllCallLogs, btgetAllContacts, btgetAllMusic;



@Override



protected void onCreate(Bundle savedInstanceState) {



// TODO Auto-generated method stub



super.onCreate(savedInstanceState);



setContentView(R.layout.layout_mainactivity);



// link button den layout de dieu khien



btgetAllCallLogs = (Button) findViewById(R.id.btgetAllCallLogs);



btgetAllContacts = (Button) findViewById(R.id.btgetAllContacts);



btgetAllMusic = (Button) findViewById(R.id.btgetAllMusic);





// dang ky lang nghe su kien onclick vao cac button



btgetAllCallLogs.setOnClickListener(this);



btgetAllContacts.setOnClickListener(this);



btgetAllMusic.setOnClickListener(this);



}





@Override



public void onClick(View v) {



// TODO Auto-generated method stub



switch (v.getId()) {



case R.id.btgetAllCallLogs:



processGetAllCallLogs();





break;



case R.id.btgetAllContacts:



processGetAllContacts();



break;



case R.id.btgetAllMusic:



processGetAllListMusic();



break;





default:



break;



}





}





private void processGetAllListMusic() {



// Log toan bo danh sach bai hat trong dt ra logcat



displayListMusic();



}





private void displayListMusic() {





// lay cac cot nhu trong bang projection



String[] projection = { MediaStore.Audio.Media._ID,



MediaStore.Audio.Media.ARTIST, MediaStore.Audio.Media.TITLE,



MediaStore.Audio.Media.DATA,



MediaStore.Audio.Media.DISPLAY_NAME,



MediaStore.Audio.Media.DURATION };





ContentResolver cr = getContentResolver();



// get toan bo danh sach bai hat



Cursor cursor = cr.query(MediaStore.Audio.Media.EXTERNAL_CONTENT_URI,



projection, null, null, "LOWER(" + MediaStore.Audio.Media.TITLE



+ ") ASC");





Log.d("List Music", "count: " + cursor.getCount());



int count = 0;



while (cursor.moveToNext()) {



count++;



// log toan bo danh sach bai hat ra logcat



Log.d("List Music",



"\ncount: " + count + "\n_id: " + cursor.getString(0)



+ "\n artist: " + cursor.getString(1) + "\ntitle: "



+ cursor.getString(2) + "\ndata: "



+ cursor.getString(3) + "\ndisplay name: "



+ cursor.getString(4) + "\n duration: "



+ cursor.getString(5)



+ "\n--------------------------");



}



cursor.close();



}





// -------------



private void processGetAllContacts() {



// Log toan bo danh ba ra logcat



displayContacts();



}





private void displayContacts() {





ContentResolver cr = getContentResolver();



// lay toan bo danh ba



Cursor cur = cr.query(ContactsContract.Contacts.CONTENT_URI, null,



null, null, null);



if (cur.getCount() > 0) {



while (cur.moveToNext()) {



// get id va name cua tung nguoi trong danh ba



String id = cur.getString(cur



.getColumnIndex(ContactsContract.Contacts._ID));



String name = cur



.getString(cur



.getColumnIndex(ContactsContract.Contacts.DISPLAY_NAME));



if (Integer



.parseInt(cur.getString(cur



.getColumnIndex(ContactsContract.Contacts.HAS_PHONE_NUMBER))) > 0) {



// lay tat ca cac sdt cua ng co _id = id



Cursor pCur = cr.query(



ContactsContract.CommonDataKinds.Phone.CONTENT_URI,



null,



ContactsContract.CommonDataKinds.Phone.CONTACT_ID



+ " = ?", new String[] { id }, null);



while (pCur.moveToNext()) {



String phoneNo = pCur



.getString(pCur



.getColumnIndex(ContactsContract.CommonDataKinds.Phone.NUMBER));



// log toan bo so dien thoai ra logcat



Log.d("List Contacts", "\nName: " + name



+ "|| Phone No: " + phoneNo



+ "\n--------------------------");



}



pCur.close();



}



}



}



cur.close();





}





// ---------------





private void processGetAllCallLogs() {



// Log nhat ky cuoc goi ra logcat



getCallDetails();



}





private void getCallDetails() {



// get toan bo lich su cuoc goi



Cursor managedCursor = managedQuery(CallLog.Calls.CONTENT_URI, null,



null, null, null);



int number = managedCursor.getColumnIndex(CallLog.Calls.NUMBER);



int type = managedCursor.getColumnIndex(CallLog.Calls.TYPE);



int date = managedCursor.getColumnIndex(CallLog.Calls.DATE);



int duration = managedCursor.getColumnIndex(CallLog.Calls.DURATION);



Log.d("Call_Logs", "Call Details :");



while (managedCursor.moveToNext()) {



// lay cac cot trong cursor



String phNumber = managedCursor.getString(number);



String callType = managedCursor.getString(type);



String callDate = managedCursor.getString(date);



Date callDayTime = new Date(Long.valueOf(callDate));



String callDuration = managedCursor.getString(duration);



String dir = null;



int dircode = Integer.parseInt(callType);



switch (dircode) {



case CallLog.Calls.OUTGOING_TYPE:



dir = "OUTGOING";



break;



case CallLog.Calls.INCOMING_TYPE:



dir = "INCOMING";



break;



case CallLog.Calls.MISSED_TYPE:



dir = "MISSED";



break;



}



// log toan bo lich su cuoc goi ra logcat



Log.d("Call_Logs", "\nPhone Number:--- " + phNumber



+ " \nCall Type:--- " + dir + " \nCall Date:--- "



+ callDayTime + " \nCall duration in sec :--- "



+ callDuration + "\n----------------------------------");



}



managedCursor.close();



}



}

Note:Các bn có th theo dõi kết qu thc hin chương trình trên logcat và màn hình. Khi làm theo ví d các bn có gì không hiu có th đ li câu hi trên web mình s tr li các bn mt cách nhanh nht có th. Các bn có th down full src theo link dưới đây

UseContentProviderAndroid

Kết quả thực hiện chương trình

ContentProvier, platform provider, android tips, androi co ban, thu thuat android

ContentProvier, platform provider, android tips, androi co ban, thu thuat androidContentProvier, platform provider, android tips, androi co ban, thu thuat androidContentProvier, platform provider, android tips, androi co ban, thu thuat android

 

 HỖ TRỢ TRỰC TUYẾN