着信接続を待機するBluetoothServerSocketを設定しようとしています。ログからと私はそれが無効になっている場合は、Bluetoothを有効にすることがわかりますアプリを使用してから。また、ServerSocketを作成することもできます。それ以上のことはしません、私はrun()メソッドのログメッセージを取得しません。Bluetoothリスニングサーバソケットの設定エラー
11-19 21:50:20.237 5187 5187 E bluetoothd: Invalid rfcomm listen params
11-19 21:50:20.237 5127 5127 E BluetoothServiceJni: Socket listen failed: 7
11-19 21:50:20.237 5127 5127 E BluetoothAdapterService: Failed to create socket channel
11-19 21:50:20.237 5127 5127 E ObexServerSockets: Error create ServerSockets
11-19 21:50:20.237 5127 5127 E ObexServerSockets: java.io.IOException: Error: -1
11-19 21:50:20.237 5127 5127 E ObexServerSockets: at android.bluetooth.BluetoothAdapter.listenUsingRfcommOn(BluetoothAdapter.java:1542)
11-19 21:50:20.237 5127 5127 E ObexServerSockets: at android.bluetooth.BluetoothAdapter.listenUsingRfcommOn(BluetoothAdapter.java:1508)
11-19 21:50:20.237 5127 5127 E ObexServerSockets: at com.android.bluetooth.ObexServerSockets.create(ObexServerSockets.java:118)
11-19 21:50:20.237 5127 5127 E ObexServerSockets: at com.android.bluetooth.ObexServerSockets.create(ObexServerSockets.java:84)
11-19 21:50:20.237 5127 5127 E ObexServerSockets: at com.android.bluetooth.map.BluetoothMapMasInstance.startRfcommSocketListener(BluetoothMapMasInstance.java:273)
11-19 21:50:20.237 5127 5127 E ObexServerSockets: at com.android.bluetooth.map.BluetoothMapService.startRfcommSocketListeners(BluetoothMapService.java:200)
11-19 21:50:20.237 5127 5127 E ObexServerSockets: at com.android.bluetooth.map.BluetoothMapService.-wrap10(BluetoothMapService.java)
11-19 21:50:20.237 5127 5127 E ObexServerSockets: at com.android.bluetooth.map.BluetoothMapService$1.handleMessage(BluetoothMapService.java:327)
11-19 21:50:20.237 5127 5127 E ObexServerSockets: at android.os.Handler.dispatchMessage(Handler.java:102)
11-19 21:50:20.237 5127 5127 E ObexServerSockets: at android.os.Looper.loop(Looper.java:148)
11-19 21:50:20.237 5127 5127 E ObexServerSockets: at android.app.ActivityThread.main(ActivityThread.java:5415)
11-19 21:50:20.237 5127 5127 E ObexServerSockets: at java.lang.reflect.Method.invoke(Native Method)
11-19 21:50:20.237 5127 5127 E ObexServerSockets: at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:744)
11-19 21:50:20.237 5127 5127 E ObexServerSockets: at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:634)
11-19 21:50:20.538 5127 5127 E ObexServerSockets: Error to create listening socket after 10 try
11-19 21:50:20.538 5127 5127 E BluetoothMapMasInstance0: Failed to start the listeners
MainActivity.java:
package com.example.android;
import android.app.Activity;
import android.bluetooth.BluetoothAdapter;
import android.bluetooth.BluetoothServerSocket;
import android.bluetooth.BluetoothSocket;
import android.content.Intent;
import android.os.Bundle;
import android.util.Log;
import java.io.IOException;
import java.util.UUID;
public class MainActivity extends Activity
{
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
new AcceptThread()**.run()**; // not enough to create new thread, its method run() also needs to be called!
}
private class AcceptThread extends Thread {
private final String LOG_TAG = getClass().getSimpleName();
private final BluetoothAdapter oBTAdapter = null;
private final BluetoothServerSocket oBTServerSocket;
private final UUID MY_UUID = UUID.fromString("4efaedef-7424-4bf6-bd70-673a7bff43fe");
private int REQUEST_ENABLE_BT = 1;
public AcceptThread() {
BluetoothAdapter oBTAdapter = BluetoothAdapter.getDefaultAdapter();
BluetoothServerSocket tmp = null;
if (!oBTAdapter.isEnabled()) {
Log.i(LOG_TAG, "bluetooth not enabled");
Intent iEnableBT = new Intent(BluetoothAdapter.ACTION_REQUEST_ENABLE);
startActivityForResult(iEnableBT, REQUEST_ENABLE_BT);
}
// Do not go further if bluetooth is not enabled
while (!oBTAdapter.isEnabled()) Log.i(LOG_TAG, "waiting for bluetooth to be enabled");
try {
tmp = oBTAdapter.listenUsingRfcommWithServiceRecord("BTServer", MY_UUID);
Log.i(LOG_TAG, "created ServerSocket");
} catch (IOException e) {
Log.i(LOG_TAG, "couldn't acquire ServerSocket");
Log.i(LOG_TAG, e.getMessage());
}
oBTServerSocket = tmp;
}
public void run() {
Log.i(LOG_TAG, "run()");
BluetoothSocket oBTSocket = null;
while (true) {
try {
oBTSocket = oBTServerSocket.accept();
Log.i(LOG_TAG, "accept()");
} catch (IOException e) {
Log.i(LOG_TAG, "failure on accept()");
Log.i(LOG_TAG, e.getMessage());
break;
}
if (oBTSocket != null) {
Log.i(LOG_TAG, "a connection was accepted");
//manageConnectedThread(oBTSocket);
try {
oBTServerSocket.close();
} catch (IOException e) {
Log.i(LOG_TAG, "failure while closing ServerSocket");
Log.i(LOG_TAG, e.getMessage());
}
break;
}
}
}
public void cancel() {
try {
oBTServerSocket.close();
} catch (IOException e) {
Log.i(LOG_TAG, e.getMessage());
}
}
public void onActivityResult(int requestCode, int resultCode, Intent intent) {
if (requestCode == REQUEST_ENABLE_BT) {
if (resultCode == RESULT_OK) {
Log.i(LOG_TAG, "bluetooth enabled with success");
} else {
Log.i(LOG_TAG, "failed to enable bluetooth");
}
}
}
}
}
EDIT1:は...誰もそれを呼び出していなかったので、呼び出されなかったメソッドの実行を()スレッドの判明します! これでaccept()コールが開始されました。しかし、少し後に私はMainActivityが応答していません。あなたはそれを閉じたいですか? accept()はブロッキングコールであり、接続が受け入れられたときや何らかのエラーが発生したときに返されることを理解しています。私はMainActivityが応答していないと言う理由を理解していません。このaccept()呼び出しは別のスレッド上にあるので、どのように問題になりますか?