開発[Android]の記事 (1/1)

スポンサーサイト

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。

アクエスのテザリングアプリ

現在試行中。でもたぶんできない。
最終的には、Root権限が必要になってくると思われる。

http://d.hatena.ne.jp/popokann/touch/searchdiary?word=*%5BAndroid%5D

これを参考に色々してみたが、どうしてもExceptionが発生してしまう。


android.net.ConnectivityManagerの
tetherを見るとエラー時の戻りがTETHER_ERROR_SERVICE_UNAVAIL;
とあるので、サービスの起動であってオンオフじゃないっぽい。


ならば

android.net.wifi.WifiManagerの
setWifiApEnabledならどうだ?と思った。

ググると
http://www.uni-labo.com/blog/2013/04/30/wifi%E3%83%86%E3%82%B6%E3%83%AA%E3%83%B3%E3%82%B0%E3%81%AE%E5%88%87%E3%82%8A%E6%9B%BF%E3%81%88/

こんな感じでできるっぽい?

setWifiApEnabled(WifiConfiguration wifiConfig, boolean enabled)
とあるので
WifiConfiguration wifiConfigを得るのに
WifiConfiguration getWifiApConfiguration()で得てみる

この時点でエラー。

もちろん得れてないから、オンもエラー。


うーん・・・・



スポンサーサイト

DatagramPacket DatagramSocket send 失敗

UDPを用いる場合は、DatagramPacket となっている。

String sendStr = "TEST";
byte []bufa = sendStr.getBytes();

InetSocketAddress remoteAddress
= new InetSocketAddress(getBroadcastAddress(this), UDPPORT);

udpSocket = new DatagramSocket();
udpSocket.setBroadcast(true); //しなくていいはずだけど

sendPacket= new DatagramPacket(buf,buf.length, remoteAddress);
udpSocket.send(sendPacket);


これいわゆるお手本どおりだと思う。
全部tryで囲んで

} catch (SocketException e) { TellToast("SocketExceptionだぜ");
} catch (IOException e) { TellToast("IOExceptionだぜ");
} catch (SecurityException e) { TellToast("SecurityExceptionだぜ");
} catch (Exception e) { TellToast("Exceptionだぜ");


これを Android2で行うと正常に終了する。
だが、 Android4で行うと Exception をキャッチしてしまう。

どうしても udpSocket.send(sendPacket)ができない。
(ちなみに受信は2でも4でもばっちりできる)

なにかセットが足りないのか?
色々やってみたけど解決しない。


もともと
android:targetSdkVersion="17" />
にしていた。
なのでターゲットをAPI10 Android2.3.3 にしてみた。

すると・・・・・・・・・
Android4でもばっちり・・・・・・・・・
なんなんこれ・・・ORZ


このアプリに関しては、
API17がなんかええ感じに昔のも動かしてくれる
と聞いたので試すのも目的だったが、もうなし決定。

テスト完了後、
新しいプロジェクトできっちりAPI指定した上で作ろう。


ちなみに レシーブ(受信)の場合も

packet.setData(buf);  // byte[] buf = new byte[256];
Socket.receive(packet);

Android4の場合はこれをしないと罠らしい。
http://www.zakugiri.com/MT/archives/2012/02/android40datagr.html

android 開発覚書

アンドロイドで HTTPのごくごく簡単な通信でつまづく

通信の方法は色々あるみたいで
http://y-anz-m.blogspot.jp/2011/10/androidapache-http-client.html

基本的には、 DefaultHttpClientと HttpURLConnection


ではじめに、
DefaultHttpClientで通信を行っていたのだが


HttpGet request = new HttpGet(requrl);
DefaultHttpClient client = new DefaultHttpClient();

HttpResponse res = client.execute(request);


これでつまづく
client.execute(request)で強制的に try囲いされるわけだが
Android2.3上では時折通信エラーを吐くが通信ができる。
しかし、Android4.2上では、エミュも実機も全く通信ができない。


プロでもないから解析できないので、
パラメータが不正なのかと

HttpParams params = new BasicHttpParams();
params.setParameter("http.useragent", "hogehoge");
HttpProtocolParams.setVersion(params, HttpVersion.HTTP_1_1);
HttpProtocolParams.setContentCharset(params, HTTP.UTF_8);
HttpConnectionParams.setConnectionTimeout(params, 5000);
HttpConnectionParams.setSoTimeout(params, 10000);
DefaultHttpClient client = new DefaultHttpClient(params);

みたいなことをしてみるが変わらずダメ。

コンパイラを4.2から2.3にしてみてもダメ。


結局、HttpURLConnectionで作り直すとどちらも全く問題ない。
これはなんなんだ?



忘れちゃならないこと


・マニュフェストに
追加


・DefaultHttpClientの場合は
client.getConnectionManager().shutdown() でコネクションを閉じる。
上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。