Androidアプリ入門 No.42 Preferenceの基本 ほかのアプリケーションのデータを読み取る
Preferenceの基本
ほかのアプリケーションのデータを読み取る
ここでは、ほかのアプリケーションのデータを読み取る例を示す。まず、sample.at.MainActivityのプロジェクトから作成する。先ほどの例のMainActirivy.javaのみ以下のように変更する。MODE_WORLD_READABLEに指定することでほかのアプリケーションからでもPreferenceを読めるようにする。
package sample.at; import android.app.Activity; import android.content.SharedPreferences; import android.content.SharedPreferences.Editor; import android.os.Bundle; import android.view.View; import android.view.View.OnClickListener; import android.widget.Button; import android.widget.EditText; import android.widget.Toast; public class MainActivity extends Activity { private EditText editText; private Button button; private SharedPreferences pref; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); editText = (EditText) findViewById(R.id.editText); pref = getPreferences(MODE_WORLD_READABLE); editText.setText(pref.getString("test", "")); button = (Button) findViewById(R.id.button); button.setOnClickListener(new OnClickListener() { @Override public void onClick(View view) { Editor editor = pref.edit(); editor.putString("test", editText.getText().toString()); editor.commit(); Toast.makeText(getApplicationContext(), "保存しました", Toast.LENGTH_SHORT).show(); } }); } }
次に、以下の条件で別のプロジェクトを作成する。
項目 | 内容 |
---|---|
Project name | PreferenceTest |
Build Target | Android 1.6 |
Application name | PreferenceTest |
Package name | sample.test |
Create Activity | PreferenceActivity |
Min SDK Version | 4 |
まず、main.xmlを以下のように編集する。
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:orientation="vertical" android:layout_width="fill_parent" android:layout_height="fill_parent" > <TextView android:id="@+id/readData" android:layout_width="fill_parent" android:layout_height="wrap_content" /> </LinearLayout>
次に、PreferenceActivityを以下のようにする。
package sample.test; import android.app.Activity; import android.content.Context; import android.content.SharedPreferences; import android.content.pm.PackageManager.NameNotFoundException; import android.os.Bundle; import android.util.Log; import android.widget.TextView; public class PreferenceActivity extends Activity { @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); TextView readData = (TextView) findViewById(R.id.readData); try { Context context = createPackageContext("sample.at", CONTEXT_IGNORE_SECURITY); SharedPreferences pref = context.getSharedPreferences("MainActivity", MODE_WORLD_READABLE); readData.setText(pref.getString("test", "NO_DATA")); Log.i(pref.getString("test", "NO_DATA"), pref.getString("test", "NO_DATA")); } catch (NameNotFoundException e) { e.printStackTrace(); } } }
まず、MainActivity.javaを実行して適当な文字列を保管する。
次に、PreferenceActivity.javaを実行し、保存した文字列が表示されるかを確認する。
保存操作はすでに確認済みなので、PreferenceActivityでどのようにファイルを呼んでいるかを確認する。
まず、ActivityTestで保管したデータを読み出すため、そのパッケージを指定してContextを作成する。それにはActivityのスーパークラスのContext#createPackageContextを用いる。定義は以下。
public abstract Context createPackageContext(String packageName, int flags)
引数はそれぞれ以下。
引数 | 内容 |
---|---|
packageName | 読み出すデータのアプリケーションのパッケージ。今回の場合、sample.at |
flag | CONTEXT_INCLUDE_CODEもしくは、CONTEXT_IGNORE_SECURITYを指定する。今回は、別のアプリケーションのデータを読み取るためCONTEXT_IGNORE_SECURITYを使用する。 |
Context取得後そこから、getSharedPreferencesでSharedPreferencesを取得する。getSharedPreferencesの定義は以下。
public abstract SharedPreferences getSharedPreferences(String name, int mode)
引数はそれぞれ以下。
引数 | 内容 |
---|---|
name | 読み出すアプリケーションファイルの名前。今回の場合、MainActivity。 |
mode | Preferenceの操作モードの決定。getPreferencesと同じモードが指定できる。 |