点線を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

ThinkPad Tabletで端末初期化する

ThinkPad Tablet(Android 3.1の端末)を購入したが、なぜか特定のアプリをフリーのUninstaller経由でアンインストールすると100%端末リセット、しかも再起動後、Androidシステムのタスクが強制終了しまくってまともに端末が使えない状況に2回も遭遇。 工場出…

ダイアログを出さずに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が発生)。 なので…

シェルスクリプトの中で変数を使ってsedで文字列置換したい

Javaソースコードのpackageを一発で切り替えたかったのでシェルスクリプトを組んでみた。最初以下のようにしたら当然のことながら$varにそのまま置換され(カッコ笑い) #!/bin/sh var=testapp1 find . -type f -a -name '*.java' | xargs sed -i -e 's/com\…

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

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

ファイルやディレクトリだけのパーミッションを変更したいとき

Windows 7 + cygwinのsedでファイルを置換したりするとファイルのパーミッションが壊れる問題が発生したのだが、対処方法がわからないので事後に以下をやることにした。ファイルの場合 find . -type f -print | xargs chmod 644 ディレクトリの場合 find . -…

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…

SVNでエラー「locked; try performing」

なにかの拍子にlockファイルが残ったために起こるらしい。 lockファイルを探して削除してcleanupすれば復活するリファレンス http://d.hatena.ne.jp/surume000/20090118

リソース定義の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 …

WidgetのIntent.putExtraについて

Widgetで簡易ランチャを作ってみたが、いくつかの異なるViewをクリックするとそれぞれ異なったパラメータを渡したいのにうまくいかない。9個のViewに対してそれぞれIntentを作成して、putExtraでパラメータを設定してServiceに飛ばすという感じを最初以下の…

twitter4jを使用したAndroid Twitterアプリケーション作成

ここで説明している仕組みを使って、Camera2Tweetというアプリを公開しました。 https://market.android.com/details?id=com.yujimny.android.c2ttwitter4jは2.1.12を使用アプリを作る上でユーザ認証が一番の課題だが、Twitterは現在Basic認証を許していない…

システム起動時に常駐するサービスを作成する

システム起動時にはACTION_BOOT_COMPLETEDがブロードキャストで飛んで来るので、まずそれを受けるクラスを作成する。 public class FooBarServiceReceiver extends BroadcastReceiver { @Override public void onReceive(Context context, Intent intent) { …

logcat read: Invalid argument

EclipseのLogCatタブに以下のようなメッセージが。 logcat read: Invalid argumentこうすれば良いらしいです。 adb logcat -c そしてEclipseを再起動参考 http://www.android-navi.com/archives/android_1/logcat/#more

android:launchModeの意味

ActivityのonNewIntent()が呼ばれない罠にはまって行き着いたのがこれなのだが、いまいちよくわからない。やりたいことは、ブラウザからアプリにリダイレクトさせてサーバからのデータを取りたい。現状試したことは、 android:launchMode属性を書かない、も…

ViewのsetWillNotDraw()の意味

これってどういう動作をするのだろう?ってことで調べてみた ViewのsetWillNotDraw()リファレンスには If this view doesn't do any drawing on its own, set this flag to allow further optimizations. と書いてあるが、具体的にはtrueを設定するとonDraw(…

画面の向きをアプリから切り替える

Activity#setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE); パーミッション設定はいらないみたい。 android.permission.SET_ORIENTATION って何に使うんだろう?Androidのリファレンスページには Allows low-level access to setting t…

アプリから端末設定の「画面の自動回転」をOFFにする

Settings.System.putInt(getContentResolver(), Settings.System.ACCELEROMETER_ROTATION, 0); AndroidManifestに以下のパーミッション記述を忘れずに。 ほかのセッティングも同様と思われる。

KeyboardViewのドロップシャドウをOFFにする

KeyboardViewを使用していてわかったのだが、Keyの背景を白系の色にするとkeyLabelに設定した文字が表示されたとき周りがにじんで見難くなってしまう。antialiasとかdrop shadowとかが有効になっているようだ。 keyLabelじゃなくてkeyIconで画像を指定すれば…