Bài 31: Sử dụng ContentProvider trong Android(P1)

Leave a Comment
Tôi có giao diện chính sau:
33_contentprovider_0

- Ta có cú pháp tổng quát:
 <standard_prefix>://<authority>/<data_path>/<id>
- Ví dụ để lấy tất cả các bookmark trong trình duyệt ta dùng cú pháp:
content://browser/bookmarks
- Để lấy toàn bộ danh bạ trong điện thoại ta dùng cú pháp:
content://contacts/people
- Để lấy 1 contact theo 1 định danh nào đó:
content://contacts/people/3
- Để lấy các kết quả trả về ta cũng dùng Cursor để quản lý.
- Có 2 cách sử dụng hàm lấy kết quả ở đây:
Cách 1:
CursorLoader loader=new  CursorLoader(context, uri, null, null, null, null);
Cursor c=loader.loadInBackground();
cách 2:
Cursor c = getContentResolver() .query(uri, null, null, null, null);
- Ta sẽ làm cụ thể từng chức năng trong ví dụ trên
- Bạn xem cấu trúc của bài tập này:
33_contentprovider_1
- Bạn xem XML Resource của màn hình chính (activity_main.xml):
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
 android:id="@+id/LinearLayout1"
 android:layout_width="match_parent"
 android:layout_height="match_parent"
 android:orientation="vertical"
 tools:context=".MainActivity" >
 
<Button
 android:id="@+id/btnshowallcontact"
 android:layout_width="match_parent"
 android:layout_height="wrap_content"
 android:text="Show All Contact" />
 
<Button
 android:id="@+id/btnaccesscalllog"
 android:layout_width="match_parent"
 android:layout_height="wrap_content"
 android:text="Access The Call Log" />
 
<Button
 android:id="@+id/btnmediastore"
 android:layout_width="match_parent"
 android:layout_height="wrap_content"
 android:text="Access Media Store" />
 
<Button
 android:id="@+id/btnaccessbookmarks"
 android:layout_width="match_parent"
 android:layout_height="wrap_content"
 android:text="Access Bookmarks" />
 
</LinearLayout>
- Source code xử lý MainActivity.java:
package tranduythanh.com;
 
import android.os.Bundle;
import android.provider.Browser;
import android.provider.CallLog;
import android.provider.CallLog.Calls;
import android.provider.MediaStore;
import android.provider.MediaStore.Audio.Media;
import android.app.Activity;
import android.content.CursorLoader;
import android.content.Intent;
import android.database.Cursor;
import android.view.Menu;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.Toast;
 
public class MainActivity extends Activity implements OnClickListener{
 
Button btnshowallcontact;
 Button btnaccesscalllog;
 Button btnaccessmediastore;
 Button btnaccessbookmarks;
 @Override
 protected void onCreate(Bundle savedInstanceState) {
 super.onCreate(savedInstanceState);
 setContentView(R.layout.activity_main);
 btnshowallcontact=(Button) findViewById(R.id.btnshowallcontact);
 btnshowallcontact.setOnClickListener(this);
 btnaccesscalllog=(Button) findViewById(R.id.btnaccesscalllog);
 btnaccesscalllog.setOnClickListener(this);
 btnaccessmediastore=(Button) findViewById(R.id.btnmediastore);
 btnaccessmediastore.setOnClickListener(this);
 btnaccessbookmarks=(Button) findViewById(R.id.btnaccessbookmarks);
 btnaccessbookmarks.setOnClickListener(this);
 }
 
@Override
 public boolean onCreateOptionsMenu(Menu menu) {
 // Inflate the menu; this adds items to the action bar if it is present.
 getMenuInflater().inflate(R.menu.activity_main, menu);
 return true;
 }
 
@Override
 public void onClick(View v) {
 Intent intent=null;
 if(v==btnshowallcontact)
 {
 intent=new Intent(this, ShowAllContactActivity.class);
 startActivity(intent);
 }
 else if(v==btnaccesscalllog)
 {
 accessTheCallLog();
 }
 else if(v==btnaccessmediastore)
 {
 accessMediaStore();
 }
 else if(v==btnaccessbookmarks)
 {
 accessBookmarks();
 }
 }
 /**
 * hàm lấy danh sách lịch sử cuộc gọi
 * với thời gian nhỏ hơn 30 giây và sắp xếp theo ngày gọi
 */
 public void accessTheCallLog()
 {
 String [] projection=new String[]{
 Calls.DATE,
 Calls.NUMBER,
 Calls.DURATION
 };
 Cursor c=getContentResolver().query(
 CallLog.Calls.CONTENT_URI,
 projection,
 Calls.DURATION+"<?",new String[]{"30"},
 Calls.DATE +" Asc");
 c.moveToFirst();
 String s="";
 while(c.isAfterLast()==false){
 for(int i=0;i<c.getColumnCount();i++){
 s+=c.getString(i)+" - ";
 }
 s+="\n";
 c.moveToNext();
 }
 c.close();
 Toast.makeText(this, s, Toast.LENGTH_LONG).show();
 }
 /**
 * hàm đọc danh sách các Media trong SD CARD
 */
 public void accessMediaStore()
 {
 String []projection={
 MediaStore.MediaColumns.DISPLAY_NAME,
 MediaStore.MediaColumns.DATE_ADDED,
 MediaStore.MediaColumns.MIME_TYPE
 };
 CursorLoader loader=new CursorLoader
 (this, Media.EXTERNAL_CONTENT_URI,
 projection, null, null, null);
 Cursor c=loader.loadInBackground();
 c.moveToFirst();
 String s="";
 while(!c.isAfterLast()){
 for(int i=0;i<c.getColumnCount();i++){
 s+=c.getString(i)+" - ";
 }
 s+="\n";
 c.moveToNext();
 }
 Toast.makeText(this, s, Toast.LENGTH_LONG).show();
 c.close();
 }
 /**
 * hàm đọc danh sách Bookmark trong trình duyệt
 */
 public void accessBookmarks()
 {
 String []projection={
 Browser.BookmarkColumns.TITLE,
 Browser.BookmarkColumns.URL,
 };
 Cursor c=getContentResolver()
 .query(Browser.BOOKMARKS_URI, projection,
 null, null, null);
 c.moveToFirst();
 String s="";
 int titleIndex=c.getColumnIndex
 (Browser.BookmarkColumns.TITLE);
 int urlIndex=c.getColumnIndex
 (Browser.BookmarkColumns.URL);
 while(!c.isAfterLast())
 {
 s+=c.getString(titleIndex)+" - "+
 c.getString(urlIndex);
 c.moveToNext();
 }
 c.close();
 Toast.makeText(this, s, Toast.LENGTH_LONG).show();
 }
}
- Source XML xử lý xem danh bạn (activity_show_all_contact.xml):
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
 android:id="@+id/LinearLayout1"
 android:layout_width="match_parent"
 android:layout_height="match_parent"
 android:orientation="vertical"
 tools:context=".ShowAllContactActivity" >
 
<ListView
 android:id="@+id/listView1"
 android:layout_width="match_parent"
 android:layout_height="wrap_content" >
 </ListView>
 
<Button
 android:id="@+id/btnback"
 android:layout_width="wrap_content"
 android:layout_height="wrap_content"
 android:text="Back" />
 
</LinearLayout>
Xem tiếp P2

0 nhận xét:

Đăng nhận xét