c09_02:Androidアプリ」カテゴリーアーカイブ

Android4.0でDatagramSocketを使うときの罠

頭に来たので書く。
Android4.0にしたNexus SでUDPソケットを使ったプログラムが動かない。
どうやら、DatagramPacketのcapacityが前回取得時の値に固定されている?
で、悩みに悩んで打った対策がこれ。
「DatagramSocket.SetData()をreceive()の前に毎回行う」

try {
m_socket.setSoTimeout(15000);
// setDataを読み込みの度に必ず行わないとAndroid4.0で受信サイズが固定されてしまう!
packet.setData(m_buffer); // byte[] m_buffer = new byte[1024];
m_socket.receive(packet);
} catch (SocketTimeoutException e) {
以下省略

これって仕様? バグ?

Android SDK最新版入れるときの罠とか

何回かやってるはずなのに毎回引っかかる罠。
事の発端はNexus SにAndroid 4.0.3を適用したこと。
手持ちにAndroid4の端末がなかったので、API Level14までしかない。
さて16入れるとなると…
とりあえずEclipseからSDK Managerで更新。
するとNexus SがUSBで認識しなくなった。
ここでEclipse本体側のパッケージも更新しないといけないのを忘れてたのがいかん。
で、更新したんだけど再起動しても認識しやしない。
いや、認識しないというのは厳密には違って、最初認識するんだけどDDMSから端末をクリックすると切れる。
どういうことだろう、と思いながらもうひとつあったケーブルにつないでみたら難なく認識。
なんだよそれー。
1時間はかかったかなぁ。
そのご、アプリの動作検証したけどエラーも出ないのに音声がでない。困るね…。

Androidでカメラを使うけれども必須でないアプリを作りたい場合

これ、探してもなかなか答えが出てこなくて数日悩んだのだが、結果はこれ。

<uses-feature android:name="android.hardware.camera" android:required="false" />

<>は当然半角で。
android:requiredでfalseを指定するらしい。
パーミッションは指定しないとカメラ使った時点でアプリが落ちるし、どうしたもんかと悩みまくっていた挙句の結果でした。うがぁ。
今後はこういう小ネタも含め、色々とネタをアップしていきたい所存。