run_prettify.js

2013年2月25日月曜日

SharedPreferencesのgetStringSetを使う場合の注意

SharedPreferencesはAPI11からSetを保存できるようになりましたが、こういうことをすると、一見上手くいっているようで上手く保存できなくなります。

/**
 * @return 保存したコレクション
 */
public Set getStringSet(){
 return sp.getStringSet(KEY, new HashSet());
}

/**
 * @param str 追加または削除する文字列
 * @return 保存に成功すればtrueを返す
 */
public boolean updateStringSet(String str){
 Set set = getStringSet();
 if(set.contains(str)){
  set.remove(str);
 } else {
  set.add(str);
 }

 return sp.edit().putStringSet(KEY, set).commit();
}

一見うまく動くんですが、プロセスが殺された後再度起動すると、前の値が保存されていません。しょぼーん。

色々試してみましたが、getStringSetのところでディープコピーすると正常に動作しました。

/**
 * @return 保存したコレクション
 */
public Set getStringSet(){
 Set saved =  sp.getStringSet(KEY, new HashSet());
 HashSet returnSet = new HashSet(saved.size());
 for (String str : saved) {
  returnSet.add(str);
 }
 return returnSet;
}

あんまりスマートではないけど、まあ解決したのでおっけー。

2013年2月24日日曜日

無効化マネージャー

無効化マネージャーをGoogle Playで公開しました。プリインストールアプリの無効化を補助するアプリです。

ダウンロードはGoogle Playからどうぞ→無効化マネージャー

機能

  • 無効化が可能で、まだ無効化されていないアプリの一覧を表示する
  • 無効化されたアプリの一覧を表示する
  • 無効化が不可能なシステムアプリの一覧を表示する
  • ユーザーがインストールした一般アプリの一覧を表示する
  • 表示中のアプリ一覧をメーラーなどに共有する
  • 一覧画面でアプリをタップすると設定画面に飛ぶ
  • 各アプリにコメントをつける
  • 実行中のプロセスのみ表示する
  • 変更日で表示・ソートする
  • 除外リストのインポート・エクスポート
  • 無効化済みリストを無効化推奨リストとしてエクスポート、そのファイルを別端末でインポートし無効化済み・無効化可能に分類して表示
変更日で表示・ソートする

v1.1.0で追加した機能です。無効化可能アプリ・無効化済みアプリについて、有効・無効を切り替えた日時を保存し、最近変更したものから順に表示できます。(設定>一般から変更可能)

既に「これとこれを無効化するといいよ!」っていう情報が出そろっている端末利用者にはあまり必要ないと機能だと思います。情報のないフロンティアが広がる端末を購入した際に、これを使ってちょっとずつ無効化を試していくと便利かなと思います。何か不具合が出たら、最近無効化したものから順に戻していけばおっけー、となります。

注意点があります。この機能は、v1.1.0以降の無効化マネージャーから「無効にする」ボタンを押しに行った場合のみ有効です。OSの標準機能ではないため、無効化マネージャー以外で行われた操作については検知できません。

実行中プロセスのみ表示について

実行中のプロセスを含んでいるアプリのみ表示するようになります。この機能を使うと、無効化を効率よく行えます。

ただし、無効化済みアプリについてはチェックの有無に関わらず全て表示されます(v1.2.3以降)。これは、チェックを入れたまま無効化作業を続けた後、有効に戻す際に迷子にならないようにするためです。

インポート・エクスポート機能

別記事にありますのでそちらをご覧ください。無効化マネージャー ヘルプ(インポートとエクスポート)

使い方など

起動すると、アプリ一覧を作成します(環境によってかかる時間に差があります)。最初は「無効化可能アプリ」の一覧が表示されます。

アプリをタップすると設定画面に飛びます。無効化したいアプリを選んで、「無効にする」を選択してください。

無効化済み、無効化不可、通常アプリの一覧も表示できます。

表示中リストの中身をメーラーなどに共有する機能があります。一通り無効化作業を済ませたら、無効化済み一覧を共有すると同じ端末を使っている人が喜ぶかもしれません。

共有のフォーマットは、「アプリ名」「パッケージ名」「両方」に加え、カスタムフォーマットが使用可能です。設定画面からフォーマットを変更できます。

アプリを長押しするとコメントを追加することができます。カスタムフォーマットを使えばコメントも共有できるので、無効化の弊害など特筆事項を記入して共有すると良いかもしれません。

無効化可能アプリの判定には、公開されているAndroidのソースコードの一部を使用しています。しかし実際に売られている端末は、キャリアやメーカーによって独自実装が施されている場合があり、確実に全ての端末で判定できるということは保証できません。既にSH-02Eにおいて、一部のドコモアプリが、無効化できないにも関わらず無効化可能アプリとして表示されてしまうのを確認しています。そういったアプリを見つけた場合は、手動で除外アプリに登録してください(長押し→「除外アプリに登録」)。

メニューから、「実行中のプロセスのみ表示」の設定を切り替えられます。このモードで表示される無効化可能アプリを無効化するのが一番効果的です。

v1.3.0で、長押しメニューからGoogle先生に飛ぶ機能を追加しました。そのアプリのアプリ名やパッケージ名の検索画面を開きます。私が個別アプリについての質問にお答えすることはできませんが、Google先生なら何かわかるかもしれません。

諸注意など

このアプリは、OS4.0.3以上対象、非rootユーザー向けです。アプリの無効化はAndroid(ICS以上)のOS標準機能です。

アプリの無効化は自己責任で行ってください。無効化可能アプリの中にも、無効化すべきでないアプリは存在します。

要求パーミッション

  • SDカードの読み込み・書き込み

除外リスト、無効化推奨リストのインポート・エクスポートに使用します。(v1.2.0以降)

動作環境

OS4.0.3以上で動作可能です。4.0.3、4.1.2、4.2のエミュレーターで動作確認をしています。

翻訳

Crowdin.netはオープンソースの場合無料で使えるとのことだったので、試してみました。

Source languageは一応Englishですが如何せんpoorなので、英訳の直しも大歓迎です。

Disable Manager Translations - Crowdin

ソースコード

以下のURLで公開中です。勉強も兼ねて作っています。ライセンスについてはREADMEをご覧ください。

https://github.com/75py/DisableManager

アイコンについて

ココナラというサービスであおきゅーさんに作っていただきました。絵心のないアプリ開発者には嬉しいサービスです。詳しくは別記事をどうぞ。無効化マネージャーのアイコンについて

今後の更新予定

  • 無効化済み一覧のインポート・エクスポート機能v1.2.0で実装
  • 一覧画面を、横スワイプで隣のタブに移動できるようにする

更新履歴

  • v1.3.1(2013/05/19)
    • XMLインポートのファイル選択の際、特定条件下で強制終了するバグを修正
  • v1.3.0(2013/04/29)
    • 長押しメニューに「検索」を追加
  • v1.2.3 2013/04/07
    • 「実行中プロセスのみ表示」のチェックの有無に関わらず、無効化済みアプリが表示されるように変更
    • 更新後、変更内容を表示するように
  • v1.2.2 2013/03/31
    • スクロールの際つまみが表示されるように変更
    • 実行中プロセスの表示形式を変更
    • 変更日によるソートの修正
    • 初回起動ダイアログでバックキーを無効に
    • アプリのテーマをDeviceDefaultからHoloに変更(一部端末での配色の乱れを修正)
    • メモリ不足による強制終了を抑制
    • その他強制終了するバグの修正
  • v1.2.1 2013/03/19
    • ファイル選択ファイアログで長いファイル名は複数行になるように修正
    • About画面にCrowdinへのリンクを追加
  • v1.2.0 2013/03/14
    • 初回起動時に確認ダイアログが出るように変更(一度OKを押せば二度と出ません)
    • 除外アプリのインポート・エクスポート機能を追加
    • 無効化済みアプリを無効化推奨リストとしてエクスポートできるように
    • 無効化推奨リストをインポートできるように
    • インポート・エクスポート機能追加のため、新たに以下のパーミッションを追加しました。
      • SDカードの中身の読み込み
      • SDカードへの書き込み
      (読み込みは将来的に追加されるパーミッションのため、現在は表示されないと思います)
  • v1.1.0 (2013/03/06)
    • 無効化可能アプリの有効
    • 無効を切り替えた際に日時を保存
    • 保存した日時を表示する
    • 最近のものから順に表示する
    • 表示とソートを有効にするかを切り替える設定項目を追加
  • v1.0.1(2013/02/25)
    • 除外アプリ一覧が正常に保存されないバグの修正
  • v1.0.0(2013/02/24)
    • Google Playで公開開始