なんかいろいろこんぴゅーたかんけいのなぐりがき

なんか勉強しているこんぴゅーた関係のことのメモやそれ以外のことを書こうかなあ...

logs

スポンサーサイト

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

AndroidでBluetooth4

ようやくコードの書き方が分かってきた。
ここでは、Androidは、Bluetoothサーバーになってacceptして接続を待ち、Python(PC)側ではサーバーを探して接続しにいく。

接続が完了したら、Android側はとりあえずひたすらメッセージを送り続け、python側はひたすらそれを受け続ける。

どちらのコードも最低限必要なところのみにして簡潔にしたつもりなので、参考になるといいなあ。
pythonが短いのはもちろん、Android側もかなり短い。少なくともgoogleのチャットサンプルより。
もっとこういうサンプルを何種類か用意してくれればソースコードを大量に読むはめにならずにすんだのに。

で、Python側は短いので対話モードで動かしていたんだけど、first_mach(↓のPythonソース参考)の中をみてたら、なんだかAndroid側をクライアントにしてPCとBluetooth通信できそうな気が少ししたので休憩したら、試してみる。


Android側

AndroidManifest.xml

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="foo.bar.BTServer"
android:versionCode="1"
android:versionName="1.0">
<application android:icon="@drawable/icon" android:label="@string/app_name">
<activity android:name=".BluetoothServer"
android:label="@string/app_name">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>

</application>
<uses-sdk android:minSdkVersion="6" />
<uses-permission android:name="android.permission.BLUETOOTH"/>
<uses-permission android:name="android.permission.BLUETOOTH_ADMIN"/>
</manifest>


BluetoothServer.java

package foo.bar.BTServer;

import android.app.Activity;
import android.bluetooth.BluetoothAdapter;
import android.os.Bundle;
import android.util.Log;
import android.widget.Toast;

public class BluetoothServer extends Activity {
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
}

public void onStart() {
super.onStart();
BluetoothAdapter my_bluetooth = BluetoothAdapter.getDefaultAdapter();
if (my_bluetooth == null) {
Log.d("debug", "Bluetooth can't use");
finish();
}

if (!my_bluetooth.isEnabled()) {
Log.d("debug", "Restart with setting Bluetooth on");
finish();
} else {
Communication comu = new Communication(my_bluetooth);
comu.start();
}

}
}


Communication.java

package foo.bar.BTServer;

import java.io.IOException;
import java.io.OutputStream;
import java.util.UUID;

import android.bluetooth.BluetoothAdapter;
import android.bluetooth.BluetoothServerSocket;
import android.bluetooth.BluetoothSocket;
import android.util.Log;

public class Communication extends Thread {
private BluetoothServerSocket bss;
private BluetoothSocket bs;
private OutputStream os;
private static final String NAME = "ANY NAME";
private static final UUID MYID = UUID
.fromString("12345678-1234-1234-1234-123456789abc");

public Communication(BluetoothAdapter my_bluetooth) {
// TODO Auto-generated constructor stub
try {
bss = my_bluetooth.listenUsingRfcommWithServiceRecord(NAME, MYID);
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}

}

public void run() {
try {
Log.d("debug", "start accept");
bs = bss.accept();
} catch (IOException e) {
// TODO Auto-generated catch block
Log.d("debug", "accept NG");
e.printStackTrace();
return;
}
Log.d("debug", "accept OK");
try {
os = bs.getOutputStream();
} catch (IOException e) {
// TODO Auto-generated catch block
Log.d("debug", "getOutputStream NG");
e.printStackTrace();
return;
}
Log.d("debug", "getOutputStream OK");
while (true) {
try {
os.write("Hello Python".getBytes());
sleep(1000);
} catch (IOException e) {
// TODO Auto-generated catch block
Log.d("debug", "os.write NG");
e.printStackTrace();
return;
} catch (InterruptedException e) {
// TODO Auto-generated catch block
Log.d("debug", "sleep NG");
e.printStackTrace();
return;
}
}

}

}



Python側

import sys
import bluetooth

uuid = "12345678-1234-1234-1234-123456789abc"
service_matches = bluetooth.find_service( uuid = uuid )

first_match = service_matches[0]
port = first_match["port"]
name = first_match["name"]
host = first_match["host"]

sock=bluetooth.BluetoothSocket( bluetooth.RFCOMM )
sock.connect((host, port))
while True: print sock.recv(1024)




スポンサーサイト

トラックバックURL

http://ilovevim.blog42.fc2.com/tb.php/142-295ff324

この記事へのトラックバック

この記事へのコメント

コメント投稿フォーム

Paging Navigation

Navigations, etc.

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