カメラを使うアプリをAndroid 1.6で動確してリリースしたら、「動かねー」とかいわれて評価が悲惨なことになった (^o^)/
Android 1.6と2.1で、Camera.Parameters.setPreviewSize()を使用した場合の動きが変わってるみたい。
1.6だとサポートしていないサイズを指定しても動くけど、2.1だとCamera.setParameters()実行時にRuntimeExceptionが発生する。
公式サンプルのやり方だと、端末によっては落ちるので注意しましょ。
2.0以降をターゲットにしているなら、getSupportedPreviewSizes()で使えるサイズを取るのが無難ですね。
1.6ならリフレクションでgetSupportedPreviewSizes()を使っても良いんだけど、サイズ指定無しでも問題なさそうです。
別プロジェクトでのAIDLの使い方についてのコメントあったので、サンプルを公開してみる。
やることはプロジェクトが同じでも別でも変わりません。
プログラム自体は以前書いたのと同じなので省略。
サービス提供側のAIDLファイルを、サービス利用側にコピーして使ってます。
本当は生ファイルを渡すのではなく、JARとかにした方がいい気がします。
InterAppsAIDL.zip
なぜか、コンテキストメニューを解説している日本語サイトが少ない気がする。
かなり重要だと思うんだけどなー。
とりあえず、こんな感じの作ってみます。

続きを読む…
写真を加工するアプリを作ってたらメモリ不足が多発した (^o^)/
Androidではアプリが使えるヒープ領域が少ないため、気をつけないとすぐにメモリ不足になる。
ヒープが少ないならヒープ外を使えばいいんじゃね、ってことでダイレクトバッファを使えばメモリをたくさん使えます。
package jp.xfutures.android.sample;
import java.nio.ByteBuffer;
import android.app.Activity;
import android.os.Bundle;
public class MemoryLimitCheckActivity extends Activity {
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
// これはメモリ不足で落ちる
ByteBuffer buf1 = ByteBuffer.allocate(20 * 1024 * 1024);
// こっちなら大丈夫
ByteBuffer buf2 = ByteBuffer.allocateDirect(20 * 1024 * 1024);
}
}
たくさん使えるからといって使いすぎには注意です。
久しぶりのAndroid開発ネタはExpandableListViewです。
タップすると子リストが表示されるアレ。

続きを読む…