Android

らくらくスマートフォン プレミアム (F-09E) 開発メモ その2

わかったこと、音声読上げ編音声読み上げ機能のON/OFF 設定→音声読み上げ→音声読上げ設定→動作でオン・オフを選択する。開発者が任意のタイミングで任意の文字列を読み上げる 富士通の「音声読み上げ実装ガイドライン.pdf」のp.41に記載されている方法で可能…

らくらくスマートフォン プレミアム (F-09E) 開発メモ

日本Androidの会 福祉部に参加していたらF-09Eを借りられる機会を得ましたので諸々メモします。らくらくスマートフォン プレミアム (F-09E) はこれまでのらくらくスマホとは違い、Google Playからアプリをダウンロードして使えることが特徴の一つです。 その…

APKの署名を確認する方法

このAPKってどの署名をつけたっけ?ってときに確認する手段です。 jarsigner -verify -verbose -certs my_application.apk 参考URL http://www.taosoftware.co.jp/blog/2008/11/android_2_1.html

OutOfMemoryErrorを救う方法

とある開発中のアプリを解像度縦横それぞれ1.5倍の端末にそのまま突っ込んでみたら、OutOfMemoryErrorが出ました。 解像度的には増えているのでcreateBitmapしてる部分が単純に2.25倍になるわけなので、最初しょうがないかなとも思いましたが、以前動かして…

APK内のAndroidManifest.xmlを取り出す方法

以下のコマンドで確認できる状態になるようです。 ただし、元のXMLの形では無いようです。 aapt dump xmltree hoge.apk AndroidManifest.xml > foo.txt 参照URL http://yuki312.blogspot.jp/2011/10/apk.html

アプリのメモリ状況をチェックするコマンド

adb shell dumpsys meminfo パッケージ名 このように表示されます。 これを、例えばアプリの画面が切り替わる前後でそれぞれ取得すると、そのメモリ使用量の差分がわかったりするので、大量にメモリを消費しているシーケンスをある程度特定できたりします。 …

ListViewを複数選択と単選択で切り替える方法

通常は単選択(Single)モードで、ユーザのメニュー選択により複数選択(Multiple)モードに切り替わるようなListViewを作成する。まず使えそうだったのが、 API LEVEL 11から追加されたListView.CHOICE_MODE_MULTIPLE_MODALでsetChoiceModeを使って設定する。 l…

Developer Consoleで日本語にならない

Android Developer Consoleで日本語にならない件。 ある日から突然英語になってしまったので、どうしちゃったのかな?ということでしばらく放置していたのですが、調べました。 いや別に日本語でないとわかりまへんというわけじゃないんですよ?一応言い訳を…

keystoreのパスワードを変更する

Androidアプリを公開したものの、signedなapkをつくったときに適当なkeystoreのパスワードを設定してしまったけど、だんだんDL数も上がってきて、もうちょっとちゃんとしようかなと思った時にどうぞ。 ちなみにkeystore自体はAndroidに限るものではありませ…

コールログを取得する方法

過去のメモから引っ張りだしてきた第3弾 コールログを取得する方法 Query作ってDBアクセスする。Xperia X10の頃の情報なので今ならもっと便利なAPIあるかも? // Prepare select data columns String projection = new String { BaseColumns._ID, CallLog.Ca…

IMoNiで外部のアプリからメールチェックをさせたり、メール受信件数を受け取ったりする

過去のメモから引っ張りだしてきた第2弾 もうお別れしている人が殆どかもしれませんが、私はまだ使っています。IMoNi。チェック機能を動作させるブロードキャスト net.grandnature.android.imodenotifier.ACTION_CHECK メール受信件数を受け取るブロードキャ…

フェイスカメラのIDを判別してOpenする

過去のメモから引っ張りだしてきた第1弾 private Camera openFrontFacingCameraGingerbread() { int cameraCount = 0; Camera cam = null; Camera.CameraInfo cameraInfo = new Camera.CameraInfo(); cameraCount = Camera.getNumberOfCameras(); for ( int …

現在設定中のIME情報を得る方法

String currentIME = Settings.Secure.getString(getApplicationContext().getContentResolver(), Settings.Secure.DEFAULT_INPUT_METHOD); Settings.SecureにアクセスするけどReadだけならPermissionは要らないようです。 取れる値は、InputMethodInfo.getI…

点線をCanvasに描画する

点線を描画するサンプル。drawLine()以外の描画処理でも使えるようです。 初期化処理{ Paint mDotPaint = new Paint(); mDotPaint.setPathEffect(new DashPathEffect(new float[]{ 5.0f, 5.0f }, 0)); // 5pixel描いたら5pixel描かないを繰り返す mDotPaint.…

Activityの左上にあるアプリアイコンがタップ出来る感じになる件(しても何もおこらない)

AndroidManifest.xmlのtargetSdkVersionを11〜13にしている場合に起きるようです。 10以下ならそもそもアイコンは出てきません。以下の解説を参照URLで見つけました。API level 11〜13 (Android 3.x)では、アプリケーションアイコンは常にクリック可能になっ…

ScrollViewでfadingEdgeを指定しているのに有効にならない件

HorizontalScrollViewをICSで使っていてfadingEdgeを使用していたのですが、いつの間にか無効になっていたのでなぜかと思って調べてみた。どうやらAndroidManifest.xmlのtargetSdkVersionをあるタイミングから14に変えたせいであることが判明。参照URLによる…

Android Source Build環境で特定のアプリだけdpiを変更したい時のmakefile

例えばタブレット端末等はシステム全体としてはmdpiがデフォルトですが、スマホ用のアプリはhdpi前提にしか作られてなかったりするので、タブレットのビルド環境でスマホ用のアプリをビルドすると画像がおかしくなったりします。 そのような場合でも以下のよ…

パフォーマンスチューニング【TextView編】

といってもシチュエーションは限定的であんまり同じ状況に遭遇することは多くないと思うが、setCompoundDrawables()やsetCompoundDrawablesWithIntrinsicBounds()を連続して呼び出している場合に注意。上記メソッドはソースコードを見ればわかるが、内部でin…

システム画像の在り処

入力時にステータスバーに登場するキーボードのアイコンを使おうとして、どこにあるかを探し た結果を記しておきます。 ※この画像はアプリからは取得できる場所にはありませんでした。 $(WORKING_DIR)/frameworks/base/packages/SystemUI/res/drawable/ic_sy…

Android Frameworkのソースコードによく出てくるSlog関数のログを取得する方法

adb logcat -b system もしかしたらビルドするときにengを付けないとダメかも知れない。参考URL http://stackoverflow.com/questions/6278406/how-to-watch-logs-from-slog

ダイアログを出さずにIMEから別のIMEに切り替える方法

自分がIME(InputMethodServiceを継承したクラス)であればswitchInputMethod()を使用することで実現可能。ただし切り替えたい相手のIMEのパッケージ名を知っている必要があります。 class TestIME extends InputMethodService { public void changeIME(){ Inp…

Camera.open(int id)は同時に一つしかできない

カメラが二台以上ある場合、複数カメラのPreview画面を同一Activity上で表示できるのか?と疑問に思ったので試してみた。 結果はCamera.open(int id)を呼び出したらCamera.release()をするまで次のCamera.open(int id)はできない(Exceptionが発生)。 なので…

native heapのメモリリークを調べたいとき

DDMSでnativeのallocateされたサイズと回数を見ることができます。 freeが行われると、回数カウントはちゃんとデクリメントされるようなので、ある操作をし続けてカウントがどんどん増えていく奴がリークの可能性大ということですね。まず、ターゲット端末の…

AndroidのBuildでccacheを使う方法

export USE_CCACHE=1 メモリが沢山ある場合は設定を変更する $ prebuilt/linux-x86/ccache/ccache -M 10G ついでにビルド時間を計るといいですね。 time make -j2 2>&1 | tee makelog.txt 実際に効いているかどうかをチェック $ prebuilt/linux-x86/ccache/c…

Android Source Build環境でapk内にlibを置きたい時のmakefile

Eclipseでネイティブライブラリをapkに組み込んで使うにはlibs/armeabiに置いておけば自動的に組み込んでくれるが、Android Source Code Build環境ではそうはいかないのでどうしたらいいのか調べてみた。例えばlibs/armeabi/libtest.soをapkに入れたい場合An…

リソース定義のXMLでエスケープする文字

リソース定義のXMLでURLの&で怒られたり怒られなかったりとか"can't"の'が表示されたりされなかったりということの整理NGパターン(Eclipseビルド時に怒られる) <string-array name="url_data_list"> <item>http://test.com/test.cgi?param1=1&param2=0</item> </string-array>OKパターン <string-array name="url_data_list"> <item>http://test.com/test.cgi?param1=</item></string-array>…

アプリからshellコマンドを実行する

こうやるんですね。参考になりました。 public void test() { try { Process p = Runtime.getRuntime().exec("su"); DataOutputStream dos = new DataOutputStream(p.getOutputStream()); dos.writeBytes("input keyevent 20\n"); // 押す dos.writeBytes("e…

ネイティブライブラリのロード時に注意すること

例えば、libtest.soをロードしたい時、 System.loadLibrary("test"); とするのが一般的だが、もし/system/libと/data/data/(パッケージ名)/libとの両方に同じ名前のlibtest.soが存在したとき、/system/libが優先になり(機種依存?)、本来パッケージ内のlib…

layout_widthに画面の半分を指定する

タイトル通りやろうとして、試しに android:layout_width="50%"とか、"half"とかやってみたがやはりダメ。ちゃんと調べてみたら、こんなやり方が。 layout_widthは0にしてlayout_weightを使うんですね。すると以下のようにすると… このようになる。参照 http…

Xperia 2.1でカメラアプリ起動して画像データ取得

カメラアプリを起動して撮影した画像の保存先を、こちらから指定したファイルにする場合、以下が一般的だが、Xperia2.1版などのカメラアプリは指定したファイルには書き込まれず、通用しないものがある。 public static final int REQUEST_CAMERA = 1; File …