2012年9月1日土曜日

ZXing QRコードスキャナーをWebから使う

ちょっと ZXing(バーコードライブラリ)のAndroid版アプリ(QRコードスキャナー)のソースを追いかけていたらちょっと気になる <intent-filter> を見つけまして。

ん、、これって?
  private static final String[] ZXING_URLS = { "http://zxing.appspot.com/scan", "zxing://scan/" };
  private static final String RETURN_CODE_PLACEHOLDER = "{CODE}";
  private static final String RETURN_URL_PARAM = "ret";
おおおおおー!?

ブラウザで表示するWebページ上で
zxing://scan/?ret=(戻り先URL)
にリンクするとQRコードスキャナーが起動する。のはよいとして、スキャンが終わると戻り先URL)に戻ってきてくれる。このときURLに {CODE} があるとその部分がスキャンした文字列になってくる。
例えばこんな感じ → zxing://scan/?ret=http%3A//tes.to/zxing.html%3Fcode%3D%7BCODE%7D

つまりWebアプリや例えば業務系のサイトなんかで、QRコードスキャナーを使ってバーコード(JAN/EANでもQRコードでもISBNでも)を読み込んでその結果を持ってページに戻ってきてもらうようなことが可能なわけです。わざわざ専用のWebViewアプリを作らなくても!

zxing://scan/ のかわりに http://zxing.appspot.com/scan を使うこともできます。

URLQRコードスキャナー
未インストールインストール済み
zxing://scan/エラーQRコードスキャナー自動起動
http://zxing.appspot.com/scanインストール案内ページ表示ブラウザで開くかQRコードスキャナーで開くか問い合せ

動作確認できるテストページも作ったので気になる方はAndroid端末実機でアクセスしてみてください。
http://tes.to/zxing.html


で、例によっていろいろ実験してから解説ページを見つけてるわけです(´・ω・`)
http://code.google.com/p/zxing/wiki/ScanningFromWebPages

2012年8月8日水曜日

アイコンカスタマイズ

JCROMと言ってもAndroidなので、任意のホームアプリを入れればランチャーのカスタマイズは自由にできるわけですが。
せっかくテーマ機能があってLauncher背景なんかもテーマで設定できるので、それならアプリアイコンもテーマで書き換えられたらおもしろいかな?と思ってやってみました。(差分 ←まだ調整が必要かもです)

アイコンを設定したサンプル:

2012年8月4日土曜日

自動起動

カスタムROMを業務で使うのはいかがなものか…なところだけど、デモ用だとこれも都合がよかったりするのです。
  • 電源ONしたら最初から特定のアプリが起動している
  • ステータスバーやナビゲーションバー(ICS以降Phone UI)、システムバー(HoneyComb以降Tablet UI)を非表示にする
なんてことができたら、特定のアプリしか動かない端末が作れます。

※Phone UIなら 全画面アプリ + ホームアプリ化 で他アプリに遷移できなくすることができるけれど、Tablet UIの場合は設定画面に遷移できてしまうのです。

2012年7月30日月曜日

HTTP logging

Android上で行われるHTTP通信のログを取りたいことがあります。主にデバッグとか。動作確認とか。
カスタムROMを作ればアプリのコードに手を入れなくてもヘッダくらいはロギングできます。
(ストリームに手を入れれば送受信データもロギングできますが、サイズが大きかったりバイナリデータだったりするのでファイル出力するなどの対応が必要でしょう。今回はリクエストヘッダだけをlogcatに出力します)

SIMエミュレーション

Androidは android.telephony.TelephonyManager からSIMの事業者や接続している通信網の事業者情報を取得します。
これらを使ったアプリを作って動作確認する場合、実際に各事業者のSIMを用意したり渡航して目的の通信事業者に接続するか、ラッパクラスを作ってテスト(動作確認)用にスタブのような固有の応答を返すなどの対策をする必要があります。

カスタムROMなら、TelephonyManager 自体にそういう「デバッグ用固定応答」の機能を持たせることができます。
というわけでやってみました。(差分1 差分2

2012年7月22日日曜日

最初からADBデバッグON

初回起動時のデフォルト言語を日本語にしたのと同様、最初からUSBデバッグが有効だったらいちいち設定画面でチェック入れなくていいから楽になる…
という思いでサクッと対応差分を作ってみたのですが、、、
frameworks/base/services/java/com/android/server/usb/UsbDeviceManager.java
                         setAdbEnabled(false);
                     }
                     SystemProperties.set("persist.service.adb.enable", "");
+                } else if (Settings.System.getInt(mContentResolver, "jcrom_adb_inited", 0) == 0) {
+                    // first boot
+                    setAdbEnabled(true);
+                    Settings.Secure.putInt(mContentResolver, Settings.Secure.DEVELOPMENT_SETTINGS_ENABLED, 1);
                 }
+                Settings.System.putInt(mContentResolver, "jcrom_adb_inited", 1);
 
                 // register observer to listen for settings changes
                 mContentResolver.registerContentObserver(

build/core/main.mk とか調べてみたら、 full_maguro-user のかわりに full_maguro-userdebug 使えばデフォルトでADBデバッグ有効になるぽいorz
そんなわけでビルドに使ってるシェルスクリプトを少し書き換えただけでこの差分は破棄 ( ゚∀゚)ノボーイ

初回起動時のデフォルト言語を日本語に

JCROMの JC は Japanese Custom らしいです。
だったら初回起動時から日本語表示して欲しい…!
(選択するだけなんだけど wipe するたびに設定し直すの面倒くさいんだもの)

というわけで調べてみました。
JCROM でも AOSP でも同じはずです。

結論だけ知りたい方は build/target/product/full_base.mk
PRODUCT_LOCALES := en_US

PRODUCT_LOCALES := ja_JP
にしてください。