Androidアプリ開発者のためのTips集。今回は、作成したプリファレンスを他のアプリケーションから使用する方法について解説する。アプリの設定情報の共有などに便利だ。
用途 | 便利 |
---|---|
カテゴリ | データI/O |
レベル | 中級 |
動作確認環境 | Android 2.3.3(GingerBread) エミュレータにて動作確認 |
備考 | 今回のTipsは上記環境で動作確認・検証を行っています |
前回、前々回に引き続き、Androidにおけるデータ保存方法の1つ「プリファレンス」について紹介する。
今回は、作成したプリファレンスを他のアプリケーション(以下、アプリ)から使用する方法について解説する。プリファレンスは、主にアプリの設定情報などの保存に使用されるため、複数のアプリで設定内容を共有したい場合に便利だ。
関連リンク: | |
---|---|
⇒ | プリファレンスを使用したデータの保存 |
⇒ | プリファレンスを使用した設定画面の作成 |
プリファレンス作成時のモード設定により、他アプリからでもプリファレンスに保存したデータを参照できる。以下は、その前提条件である。
それでは、具体的な手順を見ていこう。
プリファレンスの実体は、“テキストファイルの読み書き”である。他アプリからアクセスできるかどうかは、言ってみれば“ファイルのアクセス権”の問題である。その権限を設定してやればよい。
getSharedPreferences()メソッドでプリファレンスを作成する際、モード「Context.MODE_WORLD_READABLE」を指定することにより、他アプリからでもファイルの読み込みが可能になる。
/** 他アプリケーションから読み込み可能なプリファレンスの作成例 */ public SharedPreferences getReadablePreference( Context context, String prefName ){ return context.getSharedPreferences( prefName, Context.MODE_WORLD_READABLE ); }
他アプリが作成したプリファレンスにアクセスするには、そのアプリのContextを作成して、プリファレンスを開く必要がある。
他アプリのContextを作成するには、Context#createPackageContext()メソッドを使用する。
Context#createPackageContext ( String packageName, int flags )
第1引数の「packageName」には、対象アプリの“パッケージ名”を指定。第2引数の「flag」には、取りあえず“0”を指定しておけばよい。ただし、対象のアプリが端末にインストールされていない場合は、「NameNotFoundException」が発生するので注意してほしい。
/** 他アプリケーションのContextを作成する例 */ public Context createOtherContext( Context context, String packageName ){ try{ return context.createPackageContext( packageName, 0 ); }catch( NameNotFoundException e ){ e.printStackTrace(); return null; } }
今回、例として以下の2つのアプリを作成した。
*例1:プリファレンスに登録するアプリ
まずは、プリファレンスに登録する側のアプリを見てみよう。以下は、プリファレンスにデータを保存する部分の実装例である(レイアウトなどのテーマに関係ない部分は割愛している)。
/** 他アプリケーションから読み込み可能なプリファレンスの作成例 */ public SharedPreferences getReadablePreference( Context context, String prefName ){ return context.getSharedPreferences( prefName, Context.MODE_WORLD_READABLE ); } /** ユーザーのプロフィールをプリファレンスに保存する */ public void saveUserProfile( Context context, String name, int age, String job, boolean needTitle ){ // プリファレンスの準備 SharedPreferences pref = getReadablePreference( this, "name_and_age" ); // プリファレンスに書き込むためのEditorオブジェクト取得 // Editor editor = pref.edit(); // "user_name" というキーで名前を登録 editor.putString( "user_name", name ); // "user_age" というキーで年齢を登録 editor.putInt( "user_age", age ); // "user_job" というキーで職業を登録 editor.putString( "user_job", job ); // "user_title" というキーで敬称要否を登録 editor.putBoolean( "user_title", needTitle ); // 書き込みの確定(実際にファイルに書き込む) editor.commit(); }
*例2:ドロイド君があいさつするアプリ
次に、ドロイド君があいさつするアプリを見てみよう。こちらも今回のテーマに関連しない部分は割愛し、プリファレンスの読み込み部分の実装例にフォーカスする。
/** 他アプリケーションのContextを作成する */ public Context createOtherContext( Context context, String packageName ){ try{ return context.createPackageContext( packageName, 0 ); }catch( NameNotFoundException e ){ e.printStackTrace(); return null; } } /** 他アプリケーションのプリファレンスを読み込む */ public SharedPreferences getOtherOnesPreference( Context context, String prefName ){ // プリファレンスを保存したアプリケーションのContextを作る Context otherOnesContext = createOtherContext( context, "jp.test.preference.share" ); // プリファレンスを「MODE_WORLD_READABLE」で開く return otherOnesContext.getSharedPreferences( prefName, Context.MODE_WORLD_READABLE ); } /** プリファレンスから名前を取り出す。登録されていなければ空の文字列を返す */ public String loadName( Context context ){ // プリファレンスの準備 SharedPreferences pref = getOtherOnesPreference( context, "name_and_age" ); // "user_name" というキーで保存されている値を読み込む return pref.getString( "user_name", "" ); } /** プリファレンスから年齢を取り出す。登録されていなければ「-1」を返す */ public int loadAge( Context context ){ // プリファレンスの準備 SharedPreferences pref = getOtherOnesPreference( context, "name_and_age" ); // "user_age" というキーで保存されている値を読み込む return pref.getInt( "user_age", -1 ); } /** プリファレンスから敬称要否を取り出す。登録されていなければ「true」を返す */ public boolean loadNeedTitle( Context context ){ // プリファレンスの準備 SharedPreferences pref = getOtherOnesPreference( context, "name_and_age" ); // "user_age" というキーで保存されている値を読み込む return pref.getBoolean( "user_title", true ); }
実行結果は、以下の通りだ(画像1、2)。
≫連載「Androidアプリケーション開発者のためのTips集」の目次
Copyright © ITmedia, Inc. All Rights Reserved.