Home > c09:技術系 > c09_02:Androidアプリ Archive

c09_02:Androidアプリ Archive

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でハードが載ってるかどうか事前に調べる

読むべきものはGoogleのドキュメントだよなーとつくづく思うとともに反省。

if ([context].getPackageManager().hasSystemFeature(PackageManager.FEATURE_CAMERA)) {
    // カメラある場合の処理
}

それより困ってることがあるんだけど、別の記事で。

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

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

<uses-feature android:name="android.hardware.camera" android:required="false" />
<>は当然半角で。

android:requiredでfalseを指定するらしい。
パーミッションは指定しないとカメラ使った時点でアプリが落ちるし、どうしたもんかと悩みまくっていた挙句の結果でした。うがぁ。


今後はこういう小ネタも含め、色々とネタをアップしていきたい所存。

Index of all entries

Home > c09:技術系 > c09_02:Androidアプリ Archive

Search
Feeds

Return to page top