サンプルプログラム工場

AAKAKA Appで使われているプログラムのサンプルコードをそのまま公開!

サンプルプログラム工場 > android > [Android]電話帳にアクセスして表示するサンプル#tryPhoneBook00
Google Play AAKAKAxSOFTへ

[Android]電話帳にアクセスして表示するサンプル#tryPhoneBook00

実行ファイル(APK)やサンプル(zip)をダウンロードする
tryPhoneBook00の実行イメージ

電話帳にアクセスしてリストビューに登録されている人の名前を表示する。
メールアドレスと、名前一覧を取り出す
パーミッションにandroid.permission.READ_CONTACTSを指定しないと電話帳にはアクセスできない。
電話帳にアクセス→コンタクトID取り出す→コンタクトIDからユーザーの番号リストを取り出す(複数あることもあるから)

検索した事
 Android 電話帳 アクセス
android ContactsContract
ContactsContract.CommonDataKinds

開発環境
 Eclipse IDE バージョン: 3.7 Indigo Service Release 2
 ターゲットプラットフォーム: 2.1
 API レベル: 7

package sample.example.tryphonebook00;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

import android.os.Bundle;
import android.provider.ContactsContract;
import android.provider.ContactsContract.CommonDataKinds.Email;
import android.provider.ContactsContract.CommonDataKinds.Phone;
import android.provider.ContactsContract.Data;
import android.app.Activity;
import android.content.ContentResolver;
import android.content.pm.FeatureInfo;
import android.database.Cursor;
import android.util.Log;
import android.view.Menu;
import android.view.MenuItem;
import android.view.Window;
import android.widget.ArrayAdapter;
import android.widget.ListView;
import android.support.v4.app.NavUtils;

public class TryPhoneBook00Activity extends Activity {

	private ListView mListView;	// リストビュー
	private ArrayAdapter<String> mAdapter;	// リストビュー用のアダプタ
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_try_phone_book00);
        
        // 一番単純なアダプタ
        this.mAdapter = new ArrayAdapter<String>(this, android.R.layout.simple_list_item_1);
        
        // リストビューを取り出す
        this.mListView = (ListView)this.findViewById(R.id.listView1);
        
        // アダプターをセットする
        this.mListView.setAdapter(this.mAdapter);
        
        // メールアドレスあるやつだけ取り出す
        //
        ContentResolver cr = this.getContentResolver();

        // SQLiteにアクセスする様な感じ?
        Cursor cursor = cr.query(
        		ContactsContract.Contacts.CONTENT_URI,
        		null, null, null, null);
        
        // 何かとれてるときだけ実行
        if (cursor.moveToFirst()) {

    		try {
    			
    			// すべての電話帳に登録されているデータ
    			while (cursor.moveToNext()) {

    				// 表示用の入れ物
    				String output = "";
    				
    				
	        		// 表示名
	        		String dispName = cursor.getString(
	        				cursor.getColumnIndex(
	        						ContactsContract.Contacts.DISPLAY_NAME));
	        		
	
	        		// コンタクトID
	        		String contactId = cursor.getString(
	        				cursor.getColumnIndex(
	        						ContactsContract.Contacts._ID));
	        		Log.i(dispName + "コンタクトID", contactId);

	        		// 表示バッファに入れる
	        		output += dispName + "(" + contactId + ")";


	        		// 電話番号
	        		// 
	        		
        			// 電話番号取り出し用のカーソルを用意
        			Cursor phoneCursor = cr.query(
        					ContactsContract.CommonDataKinds.Phone.CONTENT_URI,
        					null,
        					ContactsContract.CommonDataKinds.Phone.CONTACT_ID + " = ?",
        					new String[]{
        							contactId
        					},
        					null);
        			
        			output += "\n電話番号 \n";
        			
        			// 順番に表示
        			while (phoneCursor.moveToNext()) {
        				
        				// 電話番号取り出す
        				String phoneNumber = phoneCursor.getString(
        						phoneCursor.getColumnIndex(
        								ContactsContract.CommonDataKinds.Phone.DATA1));
        				
        				output += " " + phoneNumber + "\n";
        				// 電話番号
        				Log.i(dispName + "の番号", phoneNumber);
        			}
        			
        			// カーソルクローズは忘れずに!
        			phoneCursor.close();
	        		
        			
        			// メールアドレス
        			// 
        			
    				output += "\nメアド \n";

        			
	    			// メールアドレス取り出し用のカーソルを用意
	    			Cursor mailCursor = cr.query(
	    					ContactsContract.CommonDataKinds.Email.CONTENT_URI,
	    					null,
	    					ContactsContract.CommonDataKinds.Email.CONTACT_ID + " = ?",
	    					new String[]{
	    							contactId
	    					},
	    					null);
	    			// 順番に表示
	    			while (mailCursor.moveToNext()) {
	    				String emailAddr = mailCursor.getString(
	    						mailCursor.getColumnIndex(
	    								ContactsContract.CommonDataKinds.Email.DATA1));
	    				
        				output += " " + emailAddr + "\n";

	    				// メールアドレス
	    				Log.i(dispName + "のメアド", emailAddr);
	    			}
	
	    			// カーソルクローズは忘れずに!
	    			mailCursor.close();
	    			
	    			// リストビューに登録
	    			this.mAdapter.add(output);
	    			
	        	}
    			
    			// メインのカーソルも閉じる
    			cursor.close();

        	} catch (Exception exp) {
        		exp.printStackTrace();
        	}
        	
        }
        
    }

    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        getMenuInflater().inflate(R.menu.activity_try_phone_book00, menu);
        return true;
    }

    
}

APKファイルをダウンロード サンプルプロジェクトをダウンロード

, , , , , , , ,

[Android]AsyncTaskで別スレッドで処理をするサンプル#tryAsyncTask00 [WPF|CSharp]Entity framework 5.0+SQL Server Compact 4.1でマイグレーシ...

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です


*

次のHTML タグと属性が使えます: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>