text viewに表示される値をTCPやUDPでネットワーク送信したい

787 views
Skip to first unread message

Hisashi shindo

unread,
Jun 28, 2015, 11:17:33 PM6/28/15
to android-g...@googlegroups.com
初めまして、Androidはもとよりプログラミングに関しましても初心者です。
ご相談出来ますところも知らず、皆様にご教授いただけましたら幸いです。
環境といたしましては、Android studioを使用しています。

Android端末の傾けた時の角度情報を取得しましてtext view上で表示出来る簡単なプログラムを
作成しました。
このtext view上に表示されます角度情報の値をTCPで他のパソコンへパケット送信したいと思っています
そのような事をしたい場合、何をどのように実装すべきでしょうか。またヒントになりますような
サイト等はございますでしょうか。
実装の方法としまして、表示と送信するためのプログラムは別に分岐させるような事をするのでしょうか。

すみません、プログラミング等も初心者なため大変困っております。
お力添えのほど宜しくお願い出来ましたらと思います。

Hisashi shindo

unread,
Jun 29, 2015, 8:44:18 PM6/29/15
to android-g...@googlegroups.com
socket通信をやるということについて、ネットでの情報としては理解出来ております。
このsoket通信をマルチスレッドで動作させるという感覚でしょうか。
このようなsocket通信のプログラムはメインとは別にJava Classとして追加する形となるのでしょうか
それとも、メインで使用しているJava Classに追加する形でこのようなものは書くのでしょうか。
質問ばかりで申し訳ありません。
よろしくお願いいたします。

2015年6月29日月曜日 12時17分33秒 UTC+9 Hisashi shindo:

Kazuhiro Kubota

unread,
Jun 30, 2015, 3:20:44 AM6/30/15
to android-g...@googlegroups.com
こんにちは

ネットワーク通信はこれからということなのでまずはTCPから初めることをおすすめします。

AndroidでTCP Clientを1から実装するにはjava.net.Socketパッケージを使います。

コードはWebサイトにたくさんあるのでわかりやすいのを選ぶといいと思います。

ただAndroidでjava.net.Socket(ネットワーク通信)を使う場合の気をつける点としては
MainThread以外のThreadで処理をさせることと
AndroidManifestにPermissionを設定する必要があります。

Permissionは以下の2つですね。
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />

何かわからないことがあれば遠慮なく聞いてください。

2015年6月29日月曜日 12時17分33秒 UTC+9 Hisashi shindo:
初めまして、Androidはもとよりプログラミングに関しましても初心者です。

Hisashi shindo

unread,
Jun 30, 2015, 5:57:05 AM6/30/15
to android-g...@googlegroups.com
Kazuhiro Kubota 様

大変ありがとうございます。
まず単体のみでのTCP Clientの実装を行ってみたいと思います。

それをどのように組み合わせるのかはその次なのですね。
分からない事だらけでありますので、またご教授いただけますと幸いです。

2015年6月30日火曜日 16時20分44秒 UTC+9 Kazuhiro Kubota:

Hisashi shindo

unread,
Jun 30, 2015, 11:24:54 AM6/30/15
to android-g...@googlegroups.com
Hellow worldを出すだけの単純なものとして、下記のHPページを参考としたもので
まずは考えていますが、他にもっと単純なものや今現在のAndroidならではの
やり方などは存在していたりするのでしょうか。
宜しくお願い致します。


2015年6月30日火曜日 16時20分44秒 UTC+9 Kazuhiro Kubota:
こんにちは

Kazuhiro Kubota

unread,
Jun 30, 2015, 9:22:06 PM6/30/15
to android-g...@googlegroups.com
Android側は

new Thread(new Runnable(){
 public void run() {
     MyClient client = new MyClient("localhost", 6001);
     client.sendMessage("Hello Tomorrow!!");
  }
}).start()

と言った感じに別スレッドを作成して そっちで通信させる必要があります。
後はパーミッションの設定をお忘れなく

2015年7月1日水曜日 0時24分54秒 UTC+9 Hisashi shindo:

Hisashi shindo

unread,
Jun 30, 2015, 9:44:09 PM6/30/15
to android-g...@googlegroups.com
Kazuhiro Kubota様

お忙しい中、ご回答ありがとうございます。
そこで別スレッドを立てて負荷の軽減を図るのですね。非常に勉強になります。
この別スレッドを上記ページのMain.javaとするべきなのでしょうか。
それとも、完成している元のプログラムに追加する場合にこのような形とするものなのでしょうか。
質問ばかり、すみません。宜しくお願い致します。

2015年7月1日水曜日 10時22分06秒 UTC+9 Kazuhiro Kubota:

Kazuhiro Kubota

unread,
Jun 30, 2015, 10:58:58 PM6/30/15
to android-g...@googlegroups.com
負荷の軽減のためではなくAndroidの仕様上 MainThreadではネットワーク通信ができないためです。

Main.javaの処理部分は Activityに書いていいと思います

2015年7月1日水曜日 10時44分09秒 UTC+9 Hisashi shindo:

Hisashi shindo

unread,
Jun 30, 2015, 11:40:48 PM6/30/15
to android-g...@googlegroups.com
Kazuhiro Kubota様

ありがとうございます。仕様上不可なのですね。大変参考になります。
Activityにかいていいということはその部分だけはメインのActivityに追加と
いうことですね。Activity自体を別に追加したりするのかと思っていました。
また質問するかと思いますが、宜しくお願い致します。

2015年7月1日水曜日 11時58分58秒 UTC+9 Kazuhiro Kubota:

Hisashi shindo

unread,
Jul 1, 2015, 11:51:33 AM7/1/15
to android-g...@googlegroups.com
Kazuhiro Kubota様

またまたすいません、ということはお教えいただいた

new Thread(new Runnable(){
 public void run() {
     MyClient client = new MyClient("localhost", 6001);
     client.sendMessage("Hello Tomorrow!!");
  }
}).start()

はActivityに書くということであっているのでしょうか。
そして別くらすといいますかスレッドにMyClient.javaの内容を書く
ということであっておりますでしょうか。
いろいろとすみません。宜しくお願い致します。

2015年7月1日水曜日 11時58分58秒 UTC+9 Kazuhiro Kubota:
負荷の軽減のためではなくAndroidの仕様上 MainThreadではネットワーク通信ができないためです。

Kazuhiro Kubota

unread,
Jul 1, 2015, 3:10:00 PM7/1/15
to android-g...@googlegroups.com
MyClient.javaは同じパッケージ内にクラスファイルを作って
Activity側でそのMyClientを作れば大丈夫です。

何か間違っていればIDEが教えてくれますのでトライアンドエラーで色々試してみてもいいと思います

2015年7月2日木曜日 0時51分33秒 UTC+9 Hisashi shindo:

Hisashi shindo

unread,
Jul 7, 2015, 5:15:19 AM7/7/15
to android-g...@googlegroups.com

お世話になっております。

無事、単体での通信には成功致しました。ありがとうございました。


すみません、これを組み込む際なのですが受信相手がC++の言語でなのですが

パケット通信のようにヘッダーなどバイト数を決めて通信をしたいと考えております。

回転だけのもので申し訳ないのですが以下のようになっています。


https://github.com/sdao/mb-device-tcp


This is the device_template device from the MotionBuilder Open Reality SDK, fixed so that data over TCP works. The plugin receives a stream of TCP packets that encode rotation information as a quaternion. For a quaternion w + xi + yj + zk, the wire format is a 36-byte packet:

Byte 0: the header (BYTE_HEADER = 0x3c)

Byte 1: the data packet identifier (BYTE_DATA_PACKET = 0x44)

Bytes 2-9: w in big-endian order

Bytes 10-17: x in big-endian order

Bytes 18-25: y in big-endian order

Bytes 26-33: z in big-endian order

Byte 34: the checksum, which is the sum of all bytes 2-33 truncated to a byte

Byte 35: the trailer (BYTE_TRAILER = 0x3e)


これも元々はテンプレートの改造なのですが、これを少々の改造で先のAndroid端末より

回転と移動の値を受け取りたいと思っています。

バイトの長さを決定するような場合どのような法則で決めるのでしょうか。


Android用の先日のJavaプログラムにこのようなものを組み込む場合どのような方法がありますでしょうか。


いきなり、複雑になりまして質問として適切ではないのかもしれませんが少しでもご教授いただけますと幸いです。




2015年6月29日月曜日 12時17分33秒 UTC+9 Hisashi shindo:
初めまして、Androidはもとよりプログラミングに関しましても初心者です。
Reply all
Reply to author
Forward
0 new messages