ContentResolver
3709 ワード
データはandroidではプライベートですが、ファイルデータやデータベースデータ、その他のタイプのデータも含まれています.では、2つのプログラムの間でどのようにデータ交換を行いますか?この問題を解決するのは主にContentProviderにかかっている.1つのContentProviderクラスは、他のアプリケーションがこのContent Providerの様々なデータ型を保存または読み出すことができるように、標準的なメソッドインタフェースのセットを実現します.すなわち,1つのプログラムはContentProviderの抽象インタフェースを実現することによって自分のデータを暴露することができる.外部からは見えないし、このアプリケーションが暴露したデータがアプリケーションにどのように格納されているのか、データベースで格納されているのか、ファイルで格納されているのか、ネットワークで格納されているのかを見る必要はありません.外部はこの標準と統一的なインタフェースを通じてプログラムの中のデータと付き合うことができて、プログラムの中のデータを操作することができます.
外部のプログラムはContentResolverインタフェースを介してContentProviderが提供するデータにアクセスでき、ActivityではgetContentResolverを介して親のContentResolverインスタンスを得ることができる.ContentResolverが提供するインタフェースは、ContentProviderで実装する必要があるインタフェースと対応しています.ContentResolverで該当するインタフェースにアクセスすると、ContentProviderは該当するインタフェースを実行し、結果を返します.
アドレス帳を読み込むには、次の権限を設定します.
コードを少し説明すると、まずContentResolverを使用してすべての通信レコードのcursorをクエリーし、カスタムのCursorAdapterにCursorを転送し、AutoCompleteTextViewにバインドします.
外部のプログラムはContentResolverインタフェースを介してContentProviderが提供するデータにアクセスでき、ActivityではgetContentResolverを介して親のContentResolverインスタンスを得ることができる.ContentResolverが提供するインタフェースは、ContentProviderで実装する必要があるインタフェースと対応しています.ContentResolverで該当するインタフェースにアクセスすると、ContentProviderは該当するインタフェースを実行し、結果を返します.
アドレス帳を読み込むには、次の権限を設定します.
<uses-permission android:name="android.permission.READ_CONTACTS"/>
コードを少し説明すると、まずContentResolverを使用してすべての通信レコードのcursorをクエリーし、カスタムのCursorAdapterにCursorを転送し、AutoCompleteTextViewにバインドします.
package com.kevin.contentresolver;
import android.app.Activity;
import android.content.ContentResolver;
import android.database.Cursor;
import android.os.Bundle;
import android.provider.ContactsContract;
import android.view.View;
import android.widget.AdapterView;
import android.widget.AdapterView.OnItemClickListener;
import android.widget.AutoCompleteTextView;
import android.widget.TextView;
public class Main extends Activity {
private AutoCompleteTextView autoTextView;
private TextView tv_result;
private Cursor cursor;
private ContactAdapter adapter;
private ContentResolver resolver;
//
public static final String[] PEOPLE_PROJECTION = {
ContactsContract.Contacts._ID,
ContactsContract.CommonDataKinds.Phone.NUMBER,
ContactsContract.Contacts.DISPLAY_NAME
};
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
autoTextView = (AutoCompleteTextView)findViewById(R.id.autoCompleteTextView1);
tv_result = (TextView)findViewById(R.id.tv_result);
// ContentResolver
resolver = getApplication().getContentResolver();
// Cursor
/*
* content:// scheme URI
* ,
* where
*
*
*/
cursor = resolver.query(ContactsContract.CommonDataKinds.Phone.CONTENT_URI,
PEOPLE_PROJECTION, null, null, null);
// cursor ContactsAdapter
adapter = new ContactAdapter(this, cursor);
autoTextView.setAdapter(adapter);
autoTextView.setOnItemClickListener(new OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, View view, int position,
long id) {
// Cursor
Cursor c = adapter.getCursor();
//
c.moveToPosition(position);
String number = c.getString(c.getColumnIndexOrThrow(ContactsContract.CommonDataKinds.Phone.NUMBER));
//
number = number == null ? " " : number;
tv_result.setText(c.getString(c.getColumnIndex(ContactsContract.Contacts.DISPLAY_NAME))
+ " " + number);
}
});
}
}