2017年2月
      1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28        

Amazonウィジェット

  • miniPC
  • 最近買った本
  • Raspberry Pi
  • クアッドコプター
  • 書籍ランキング

AdSense

  • 広告
無料ブログはココログ

Android

2014年5月 5日 (月)

アンドロイド端末からWifiでデータを送れるようにする。

アンドロイド端末からWifiでデータを飛ばすために、クライアントプログラムを作成した。

メインで参考にしたHP。(外部ページへ)

使用環境
ADT 64bit Build: v22.3.0-887826
Win7 SP1 64bit

パーミッションを追加する方法はここを参考にした(外部HP)
ソケット通信ではインターネット接続を行うので、パーミッションにandroid.permission.INTERNETを追加する必要がある。

Manifest.xmlのなかで宣言するタグは、直接打ち込む方法もあるが、
Permissionsのタブを選んで、Nameの欄に直接下記の文言を打ち込む方法もあるようだ。
「android.permission.INTERNET」

ここまでで適当にやればコンパイルが出来た。打ち込むときは、activity_main.xmlの中身からやると、MainActivity.javaの中身を打たなくてもビューだけは表示されるので画面をすぐ確認できる。

xmlのコードはファイル全体を丸写しのコピペで実行可能。

android:text=""
の中身に値を入れたら、デフォルトで書き込んだ状態で起動できるのでデバッグに便利。

Sendのボタンも機能するようになったのだが、まだサーバが受信できない。
AndroidにはLog出力機能があるので、それを使って地道にprintfでやるようなデバッグをするとよい。
参考にしたページ(外部HP)

// ログを出力します
Log. v("proc", "ボタンが押されたぞ。" );

 


printでもOK。この場合はLogCatに緑文字で表示される。Logの場合は黒文字。

// ログを出力します
System.out.println();

-----------------------------

MainActivityとボタン押下までは機能しているのだが、ログを見るとその直後の処理でつまずいているらしく。下記のようなエラーが出てくる。これはADTの下のペインにあるLogCatに、英語でズラズラと大量のエラーが出てくる中の抜粋。見る気をなくしてしまうぐらい細かいので、メモ帳にコピーしてから一番上の行から順番に。わかりやすい単語から拾って読んでいくのがコツ。

05-05 18:01:27.883: W/System.err(4296): java.net.SocketException: Permission denied

パーミッションの設定がミスしているらしい。ちゃんと打ち込んだのにな。
ADTのGUIから打ち込んだらpermissionタグになっていた。下記のようにuses-permissionに書き直したら動くようになった。

<uses-permission android:name="android.permission.INTERNET" >
</uses-permission >

ADTコンソールのログが役に立った。

書き換え必要なのは、
AndroidManifest.xml
res/layout/activity_main.xml
MainActivity.java


の3つ。

<トラブルシュート>
・ルータでDHCPを使っている場合はIPアドレスが毎回変わるので都度確認すること。
・PC側でサーバプログラムを動かすときは、ファイアウォールの設定を確認すること。
・ポートは20000番ならその番号でサーバとクライアントそろえる。ファイアウォールはそのポートだけ許可にする。