Preferencesの変わった利用を考えてみる
自メモ)
Androidだとレジストリにちょっとしたデータを保存するイメージで
Preferencesを使うのでよく実装する関数はこんな感じ。
これを利用してUUIDを作る感じ。
実際はREAD_PHONE_STATEで端末情報取ったりする方が確実なんだそうなんだけど
IOSと違って権限を表示してしまっている分、詳しい人にきつめに言及されると使えないんですよね〜。
そういう意味だとBlueToothも同じ訳ですけど*1
IOSはそんなの言及しなくても使えるから、ある意味羨ましい面もあるんですけどね。
特に既存のアプリとかだと、ちょっと権限増えるだけで
言いがかりっぽい邪推をされてしまう点は凄く困ったところ
AndroidだとMacアドレスから作るOSSの奴もセキュリティ的にダメでしょうと言及はされてたけど
IOSに関してはあんまり言われないのは、儲かってる市場だからかな。。(汗
で本題としては

Android Security 安全なアプリケーションを作成するために
- 作者: タオソフトウェア株式会社
- 出版社/メーカー: インプレスジャパン
- 発売日: 2011/12/29
- メディア: 大型本
- 購入: 6人 クリック: 141回
- この商品を含むブログ (27件) を見る
=>
Preferences で遣り取りすれば良くない?
と思ったわけですよ
で実際試してみたら、こんな感じ
- 駄目な例
class HogeActivity private void Hoge(){ put_int("test_int",1); Intent i = new Intent(getApplicationContext(),FugaActivity.class); startActivity(i); } class FugaActivity @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); int val = get_int("test_int",-1); //-1が取得される }
- 成功した例
class HogeActivity public static Activity instance; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); instance = this; } private void Hoge(){ put_int("test_int",1); Intent i = new Intent(getApplicationContext(),FugaActivity.class); startActivity(i); } class FugaActivity @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); int val = HogeActivity.instance.get_int("test_int",-1); //1が取得される }
ようはActivty別なんだな・・・って話。
確かに Intent ってブラウザ立ち上げたりする機能で
別プロセス立ち上げるイメージになる訳なんですけど
どうしても同じapk内にある場合は、情報とか共有しているんじゃない?
とか思ってしまっていた点がありました・・。完全別物扱いなのか・・。
別扱いだとsqliteとかDBやファイルで同期取るみたいな考え方も
必要になってくるのかもしれませんね〜
追記)
@kojiokb さんより
@kimukou2628 ちょっと手を動かしてみました。Activity間のPreferenceによるパラメータ渡しの件、getPreferences()をPreferenceManager.getDefaultSharedPreferences()に変えるとうまく動きました。
2012-06-29 23:18:13 via web to @kimukou2628
自分的には
@kojiokb おお。ありがとうございます!同一apkだと A)getPreferences() =>B)PreferenceManager.getDefaultSharedPreferences() でいけるのですね!ただこの場合A)で作成済データをB)で参照できるか不安
2012-06-29 23:28:50 via Tween to @kojiokb
追記2)
取りあえず動いたので
な感じでソースはさらしておく
*1:こちらはこの権限入れるだけで電池を食うな文句が凄い