My Photo

« 2012夏アニメ視聴予定 | Main | 日本の財政破綻は近いのか »

June 12, 2012

Androidアプリ開発メモ064:コンテツプロバイダ その2:コンテンツURI

関連する以前の記事:Androidアプリ開発メモ022:コンテンツプロバイダ

定義済みコンテンツプロバイダ用URI

端末内の様々なデータ、たとえば電話帳のデータなどをコンテツプロバイダから取得できる。そのURIは定数として定義されている。

URI コンテンツ 必要なパーミッション
CallLog.Calls.CONTENT_URI
通話ログ(発着信履歴)
android.permission.READ_CONTACTS
ContactsContract.Contacts.CONTENT_URI
電話帳(1アカウント1レコード)
android.permission.READ_CONTACTS
ContactsContract.Data.CONTENT_URI
電話帳(1データ1レコード:1人の人に自宅電話、携帯電話、勤務先電話が登録されていれば3レコードになる)
android.permission.READ_CONTACTS
ContactsContract.CommonDataKinds.Phone.CONTENT_URI
電話帳に登録してある電話番号
android.permission.READ_CONTACTS
ContactsContract.CommonDataKinds.StructuredPostal.CONTENT_URI
電話帳に登録してある住所
android.permission.READ_CONTACTS
ContactsContract.CommonDataKinds.Email.CONTENT_URI
電話帳に登録してあるメールアドレス
android.permission.READ_CONTACTS
Settings.System.CONTENT_URI
端末の各種設定
Settings.Secure.CONTENT_URI
端末のセキュリティに関する設定
UserDictionary.Words.CONTENT_URI
ユーザー辞書
MediaStore.Images.Media.INTERNAL_CONTENT_URI
端末内のストレージにある画像データ
MediaStore.Images.Media.EXTERNAL_CONTENT_URI
外部メディアにある画像データ
MediaStore.Audio.Media.INTERNAL_CONTENT_URI
端末内のストレージにあるオーディオデータ
MediaStore.Audio.Media.EXTERNAL_CONTENT_URI
外部メディアにあるオーディオデータ
MediaStore.Video.Media.INTERNAL_CONTENT_URI
端末内のストレージにあるビデオデータ
MediaStore.Video.Media.EXTERNAL_CONTENT_URI
外部メディアにあるビデオデータ
Browser.BOOKMARKS_URI
ブラウザのブックマーク
com.android.browser.permission.READ_HISTORY_BOOKMARKS
com.android.browser.permission.WRITE_HISTORY_BOOKMARKS

APIDemosの Views>Lists>7.Cursor(Phones) が電話帳から電話番号を取ってきている。ソースコードは List7.java。
以下は電話番号を電話帳から取ってくる自分で作った超適当なサンプルコード。

package com.example.contactssample;

import android.app.Activity;
import android.database.Cursor;
import android.net.Uri;
import android.os.Bundle;
import android.provider.ContactsContract;
import android.util.Log;
import android.widget.TextView;

public class ContactsSample extends Activity {
	
	private static final String[] PROJECTION = new String[] {
//		ContactsContract.Contacts._ID,
//		ContactsContract.Contacts.DISPLAY_NAME,
//		ContactsContract.Contacts.HAS_PHONE_NUMBER,
//		ContactsContract.Contacts.LOOKUP_KEY
		ContactsContract.CommonDataKinds.Phone._ID,	// _id
		ContactsContract.CommonDataKinds.Phone.DISPLAY_NAME,	// display_name
		ContactsContract.CommonDataKinds.Phone.NUMBER,	// data1 電話番号
		ContactsContract.CommonDataKinds.Phone.TYPE,	// data2 電話番号のタイプ(自宅、携帯、etc...)
		ContactsContract.CommonDataKinds.Phone.LABEL,	// data3 ?
	};

	Uri uri
//		= ContactsContract.Contacts.CONTENT_URI;
		= ContactsContract.CommonDataKinds.Phone.CONTENT_URI;
	
	/** Called when the activity is first created. */
	@Override
	public void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.main);
		
		TextView textView1 = (TextView)findViewById(R.id.textView1);
		TextView textView2 = (TextView)findViewById(R.id.textView2);
		
		// Get a cursor with all people
		Cursor cursor = managedQuery(uri,
//				null,	// 何も指定しないと全カラムを取ってくるようだ
				PROJECTION,
				null, null, null);
		
		// 行数、列数をログに出力
		int count = cursor.getCount();
		int columnCount = cursor.getColumnCount();
		Log.v("CP", "count=" + count + ",columnCount=" + columnCount);
		
		// 列名をテキストビュー1に出力
		String[] columnNames = cursor.getColumnNames();
		StringBuffer sb = new StringBuffer();
		for (String s : columnNames) {
			sb.append(s);
			sb.append("/");
		}
		textView1.setText(sb.toString());
		
		// データをテキストビュー2に出力
		sb.delete(0, sb.length());
		while (cursor.moveToNext()) {
			for (int i = 0; i < columnCount; i++) {
				sb.append(cursor.getString(i));
				sb.append("/");
			}
			sb.append("\n");
		}
		textView2.setText(sb.toString());
	}
}

Activity#managedQuery() はdeprecatedになっていた。Android 3.0(API Level 11)以降は CursorLoader ってのを使うのが推奨らしい。

以下のコードはSDカードにあるファイルを取得している。 ContentResolver を使っているがURIが "file://" で始まっている。これはコンテンツプロバイダーを使っているといえるのだろうか?

InputStream is
    = getContentResolver()
        .openInputStream(Uri.parse("file:///sdcard/test.txt"));

参考ページ:
Androidのコンテントプロバイダで使えるURI一覧(1) | mucchinのAndroid戦記
ContactsContractを使った電話帳データの取得 | GE Android Blog
ContentProvider | Tech Booster
メモメモ - [Android]端末の電話帳を読み込む

« 2012夏アニメ視聴予定 | Main | 日本の財政破綻は近いのか »

Androidアプリ開発」カテゴリの記事

Comments

Post a comment

(Not displayed with comment.)

TrackBack

TrackBack URL for this entry:
http://app.cocolog-nifty.com/t/trackback/26461/54945750

Listed below are links to weblogs that reference Androidアプリ開発メモ064:コンテツプロバイダ その2:コンテンツURI:

« 2012夏アニメ視聴予定 | Main | 日本の財政破綻は近いのか »

September 2017
Sun Mon Tue Wed Thu Fri Sat
          1 2
3 4 5 6 7 8 9
10 11 12 13 14 15 16
17 18 19 20 21 22 23
24 25 26 27 28 29 30
無料ブログはココログ

日本blog村

  • にほんブログ村 IT技術ブログへ
  • にほんブログ村 アニメブログへ
  • にほんブログ村 サッカーブログ アルビレックス新潟へ

好きな音楽家

メモ

XI-Prof