gpt4 book ai didi

android 蓝牙连接失败(isSocketAllowedBySecurityPolicy 开始 : device null)

转载 作者:塔克拉玛干 更新时间:2023-11-02 22:54:51 25 4
gpt4 key购买 nike

我正在尝试用蓝牙连接两部手机(galaxy note1、galaxy note2),但套接字连接失败。

这是我的 LogCat:

 I/BluetoothService(24036): BEGIN mConnectThread
D/BluetoothUtils(24036): isSocketAllowedBySecurityPolicy start : device null
D/BluetoothService(24036): setState() 2 -> 1
D/BluetoothService(24036): Connect Fail
D/BluetoothService(24036): start
V/BluetoothSocket.cpp(24036): abortNative
V/BluetoothSocket.cpp(24036): ...asocket_abort(56) complete
V/BluetoothSocket.cpp(24036): destroyNative
V/BluetoothSocket.cpp(24036): ...asocket_destroy(56) complete
D/BluetoothUtils(24036): isSocketAllowedBySecurityPolicy start : device null
D/BluetoothService(24036): setState() 1 -> 1
D/BluetoothService(24036): Connect Fail
D/BluetoothService(24036): start

我不知道为什么会出现“连接失败”。

isSocketAllowedBySecurityPolicy 开始:设备 null' 是问题吗?或者蓝牙 uuid 不正确?

你能告诉我问题是什么以及如何解决吗?

我还添加了关于蓝牙服务部分的 src 代码

public class BluetoothService {
// Debugging
private static final String TAG = "BluetoothService";

// Intent request code
private static final int REQUEST_CONNECT_DEVICE = 1;
private static final int REQUEST_ENABLE_BT = 2;

// RFCOMM Protocol
private static final UUID MY_UUID = UUID
.fromString("8ce255c0-200a-11e0-ac64-0800200c9a66");

private BluetoothAdapter btAdapter;

private Activity mActivity;
private Handler mHandler;

private ConnectThread mConnectThread;
private ConnectedThread mConnectedThread;

private int mState;

private static final int STATE_NONE = 0; // we're doing nothing
private static final int STATE_LISTEN = 1; // now listening for incoming
// connections
private static final int STATE_CONNECTING = 2; // now initiating an outgoing
// connection
private static final int STATE_CONNECTED = 3; // now connected to a remote
// device

// Constructors
public BluetoothService(Activity ac, Handler h) {
mActivity = ac;
mHandler = h;

btAdapter = BluetoothAdapter.getDefaultAdapter();
}

/**
* Check the Bluetooth support
*
* @return boolean
*/
public boolean getDeviceState() {
Log.i(TAG, "Check the Bluetooth support");

if (btAdapter == null) {
Log.d(TAG, "Bluetooth is not available");

return false;

} else {
Log.d(TAG, "Bluetooth is available");

return true;
}
}

/**
* Check the enabled Bluetooth
*/
public void enableBluetooth() {
Log.i(TAG, "Check the enabled Bluetooth");

if (btAdapter.isEnabled()) {
Log.d(TAG, "Bluetooth Enable Now");

// Next Step
scanDevice();
} else {
Log.d(TAG, "Bluetooth Enable Request");

Intent i = new Intent(BluetoothAdapter.ACTION_REQUEST_ENABLE);
mActivity.startActivityForResult(i, REQUEST_ENABLE_BT);
}
}

/**
* Available device search
*/
public void scanDevice() {
Log.d(TAG, "Scan Device");

Intent serverIntent = new Intent(mActivity, DeviceListActivity.class);
mActivity.startActivityForResult(serverIntent, REQUEST_CONNECT_DEVICE);
}

/**
* after scanning and get device info
*
* @param data
*/
public void getDeviceInfo(Intent data) {
// Get the device MAC address
String address = data.getExtras().getString(
DeviceListActivity.EXTRA_DEVICE_ADDRESS);
// Get the BluetoothDevice object
// BluetoothDevice device = btAdapter.getRemoteDevice(address);
BluetoothDevice device = btAdapter.getRemoteDevice(address);

Log.d(TAG, "Get Device Info \n" + "address : " + address);

connect(device);
}

private synchronized void setState(int state) {
Log.d(TAG, "setState() " + mState + " -> " + state);
mState = state;
}

public synchronized int getState() {
return mState;
}

public synchronized void start() {
Log.d(TAG, "start");

// Cancel any thread attempting to make a connection
if (mConnectThread == null) {

} else {
mConnectThread.cancel();
mConnectThread = null;
}

// Cancel any thread currently running a connection
if (mConnectedThread == null) {

} else {
mConnectedThread.cancel();
mConnectedThread = null;
}
}

public synchronized void connect(BluetoothDevice device) {
Log.d(TAG, "connect to: " + device);

// Cancel any thread attempting to make a connection
if (mState == STATE_CONNECTING) {
if (mConnectThread == null) {

} else {
mConnectThread.cancel();
mConnectThread = null;
}
}

// Cancel any thread currently running a connection
if (mConnectedThread == null) {

} else {
mConnectedThread.cancel();
mConnectedThread = null;
}

// Start the thread to connect with the given device
mConnectThread = new ConnectThread(device);

mConnectThread.start();
setState(STATE_CONNECTING);
}

// ConnectedThread
public synchronized void connected(BluetoothSocket socket,
BluetoothDevice device) {
Log.d(TAG, "connected");

// Cancel the thread that completed the connection
if (mConnectThread == null) {

} else {
mConnectThread.cancel();
mConnectThread = null;
}

// Cancel any thread currently running a connection
if (mConnectedThread == null) {

} else {
mConnectedThread.cancel();
mConnectedThread = null;
}

// Start the thread to manage the connection and perform transmissions
mConnectedThread = new ConnectedThread(socket);
mConnectedThread.start();

setState(STATE_CONNECTED);
}

// thread stop
public synchronized void stop() {
Log.d(TAG, "stop");

if (mConnectThread != null) {
mConnectThread.cancel();
mConnectThread = null;
}

if (mConnectedThread != null) {
mConnectedThread.cancel();
mConnectedThread = null;
}

setState(STATE_NONE);
}

public void write(byte[] out) { // Create temporary object
ConnectedThread r; // Synchronize a copy of the ConnectedThread
synchronized (this) {
if (mState != STATE_CONNECTED)
return;
r = mConnectedThread;
} // Perform the write unsynchronized r.write(out); }
}

private void connectionFailed() {
setState(STATE_LISTEN);
}

private void connectionLost() {
setState(STATE_LISTEN);

}

private class ConnectThread extends Thread {
private final BluetoothSocket mmSocket;
private final BluetoothDevice mmDevice;

public ConnectThread(BluetoothDevice device) {
mmDevice = device;
BluetoothSocket tmp = null;

try {
tmp = device.createRfcommSocketToServiceRecord(MY_UUID);
} catch (IOException e) {
Log.e(TAG, "create() failed", e);
}
mmSocket = tmp;
}

public void run() {
Log.i(TAG, "BEGIN mConnectThread");
setName("ConnectThread");

btAdapter.cancelDiscovery();

try {
mmSocket.connect();
Log.d(TAG, "Connect Success");

} catch (IOException e) {
connectionFailed();
Log.d(TAG, "Connect Fail");

try {
mmSocket.close();
} catch (IOException e2) {
Log.e(TAG,
"unable to close() socket during connection failure",
e2);
}
BluetoothService.this.start();
return;
}

synchronized (BluetoothService.this) {
mConnectThread = null;
}

connected(mmSocket, mmDevice);
}

public void cancel() {
try {
mmSocket.close();
} catch (IOException e) {
Log.e(TAG, "close() of connect socket failed", e);
}
}
}

private class ConnectedThread extends Thread {
private final BluetoothSocket mmSocket;
private final InputStream mmInStream;
private final OutputStream mmOutStream;

public ConnectedThread(BluetoothSocket socket) {
Log.d(TAG, "create ConnectedThread");
mmSocket = socket;
InputStream tmpIn = null;
OutputStream tmpOut = null;

try {
tmpIn = socket.getInputStream();
tmpOut = socket.getOutputStream();
} catch (IOException e) {
Log.e(TAG, "temp sockets not created", e);
}

mmInStream = tmpIn;
mmOutStream = tmpOut;
}

public void run() {
Log.i(TAG, "BEGIN mConnectedThread");
byte[] buffer = new byte[1024];
int bytes;

// Keep listening to the InputStream while connected
while (true) {
try {
bytes = mmInStream.read(buffer);

} catch (IOException e) {
Log.e(TAG, "disconnected", e);
connectionLost();
break;
}
}
}

/**
* Write to the connected OutStream.
*
* @param buffer
* The bytes to write
*/
public void write(byte[] buffer) {
try {
mmOutStream.write(buffer);

} catch (IOException e) {
Log.e(TAG, "Exception during write", e);
}
}

public void cancel() {
try {
mmSocket.close();
} catch (IOException e) {
Log.e(TAG, "close() of connect socket failed", e);
}
}
}

connect fail 发生在 connectThread。很抱歉,这个问题不容易阅读。

最佳答案

尝试通过以下方式获取正确的 UUID:

BluetoothDevice device;
ParcelUuid list[] = device.getUuids();
//use e.g. first list[0]

关于android 蓝牙连接失败(isSocketAllowedBySecurityPolicy 开始 : device null),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26811184/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com