Java 建立蓝牙连接

Java 建立蓝牙连接,java,android,bluetooth,Java,Android,Bluetooth,我不知道是什么问题。我已经尝试过其他的解决方案,但没有真正起作用。这是我的密码。我只需要与我的蓝牙屏蔽建立连接。Mac地址已被识别。一旦我点击了bluetooth shield的mac添加,它就会关闭。求你了。救命啊 package aijm.pd.testing; /** * Created by Alyssa on 1/7/2016. */ import android.app.Activity; import android.bluetooth.BluetoothAdapter;

我不知道是什么问题。我已经尝试过其他的解决方案,但没有真正起作用。这是我的密码。我只需要与我的蓝牙屏蔽建立连接。Mac地址已被识别。一旦我点击了bluetooth shield的mac添加,它就会关闭。求你了。救命啊

package aijm.pd.testing;

/**
 * Created by Alyssa on 1/7/2016.
 */
 import android.app.Activity;
 import android.bluetooth.BluetoothAdapter;
 import android.bluetooth.BluetoothDevice;
 import android.bluetooth.BluetoothSocket;
 import android.content.BroadcastReceiver;
 import android.content.Context;
 import android.content.Intent;
 import android.content.IntentFilter;
 import android.os.Bundle;
 import android.view.View;
 import android.widget.AdapterView;
 import android.widget.ArrayAdapter;
 import android.widget.Button;
 import android.widget.ListView;
 import android.widget.TextView;
 import android.widget.Toast;

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

public class newConnection extends Activity {

    private static final int REQUEST_ENABLE_BT = 1;

    ListView listDevicesFound;
    Button btnScanDevice;
    TextView stateBluetooth;
    BluetoothAdapter bluetoothAdapter;

    ArrayAdapter<String> btArrayAdapter;

    // universal UUID
    private static final UUID myUUID = UUID.fromString("00001101-0000-1000-8000-00805f9b34fb");
    // bluetooth device MAC address
    private static String address = "20:00:06:08:10:40";


    ThreadConnectBTDevice myThreadConnectBTDevice;

    /** Called when the activity is first created. */
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.newconnection);

        btnScanDevice = (Button)findViewById(R.id.scandevice);
        stateBluetooth = (TextView)findViewById(R.id.bluetoothstate);
        bluetoothAdapter = BluetoothAdapter.getDefaultAdapter();

        listDevicesFound = (ListView)findViewById(R.id.devicesfound);
        btArrayAdapter = new ArrayAdapter<String>(newConnection.this, android.R.layout.simple_list_item_1);
        listDevicesFound.setAdapter(btArrayAdapter);

        listDevicesFound.setOnItemClickListener(new AdapterView.OnItemClickListener() {
            @Override
            public void onItemClick(AdapterView<?> parent, View view, int position, long id) {

                BluetoothDevice device = (BluetoothDevice)parent.getItemAtPosition(position);
                Toast.makeText(newConnection.this, "Name: "+device.getName()+ "\n"
                + "Address: " +device.getAddress()+ "\n"
                + "Bond state: " +device.getBondState()+ "\n"
                + "Bluetooth class: " +device.getBluetoothClass()+ "\n"
                + "Class: " +device.getClass(), Toast.LENGTH_LONG).show();

                myThreadConnectBTDevice = new ThreadConnectBTDevice(device);
                myThreadConnectBTDevice.start();

            }
        });

        CheckBlueToothState();

        btnScanDevice.setOnClickListener(btnScanDeviceOnClickListener);

        registerReceiver(ActionFoundReceiver,
                new IntentFilter(BluetoothDevice.ACTION_FOUND));
    }

    private class ThreadConnectBTDevice extends Thread {

        private BluetoothSocket bluetoothsocket = null;
        private BluetoothDevice device = bluetoothAdapter.getRemoteDevice(address);

        public ThreadConnectBTDevice(BluetoothDevice device) {
            try {
                bluetoothsocket = device.createRfcommSocketToServiceRecord(myUUID);
                stateBluetooth.setText("Bluetooth socket: " + bluetoothsocket);
            } catch (IOException e) {
                e.printStackTrace();
            }
            bluetoothAdapter.cancelDiscovery();

            try {
                bluetoothsocket.connect();
                stateBluetooth.setText("Connection Established!");
            } catch (IOException e) {
                try {
                    bluetoothsocket.close();
                } catch (IOException ee) {
                    stateBluetooth.setText("Unable to close socket during connection failure." + ee.getMessage());
                }
            }

        }
    }

    @Override
    protected void onDestroy() {
        // TODO Auto-generated method stub
        super.onDestroy();
        unregisterReceiver(ActionFoundReceiver);
    }

    private void CheckBlueToothState(){
        if (bluetoothAdapter == null){
            stateBluetooth.setText("Bluetooth NOT support");
        }else{
            if (bluetoothAdapter.isEnabled()){
                if(bluetoothAdapter.isDiscovering()){
                    stateBluetooth.setText("Bluetooth is currently in device discovery process.");
                }else{
                    stateBluetooth.setText("Bluetooth is Enabled.");
                    btnScanDevice.setEnabled(true);
                }
            }else{
                stateBluetooth.setText("Bluetooth is NOT Enabled!");
                Intent enableBtIntent = new Intent(BluetoothAdapter.ACTION_REQUEST_ENABLE);
                startActivityForResult(enableBtIntent, REQUEST_ENABLE_BT);
            }
        }
    }

    private Button.OnClickListener btnScanDeviceOnClickListener
            = new Button.OnClickListener(){

        @Override
        public void onClick(View arg0) {
            // TODO Auto-generated method stub
            btArrayAdapter.clear();
            bluetoothAdapter.startDiscovery();
        }};

    @Override
    protected void onActivityResult(int requestCode, int resultCode, Intent data) {
        // TODO Auto-generated method stub
        if(requestCode == REQUEST_ENABLE_BT){
            CheckBlueToothState();
        }
    }

    private final BroadcastReceiver ActionFoundReceiver = new BroadcastReceiver(){

        @Override
        public void onReceive(Context context, Intent intent) {
            // TODO Auto-generated method stub
            String action = intent.getAction();
            if(BluetoothDevice.ACTION_FOUND.equals(action)) {
                BluetoothDevice device = intent.getParcelableExtra(BluetoothDevice.EXTRA_DEVICE);
                btArrayAdapter.add(device.getName() + "\n" + device.getAddress());
                btArrayAdapter.notifyDataSetChanged();
            }
        }};

}
包aijm.pd.testing;
/**
*由Alyssa于2016年1月7日创建。
*/
导入android.app.Activity;
导入android.bluetooth.BluetoothAdapter;
导入android.bluetooth.bluetooth设备;
导入android.bluetooth.BluetoothSocket;
导入android.content.BroadcastReceiver;
导入android.content.Context;
导入android.content.Intent;
导入android.content.IntentFilter;
导入android.os.Bundle;
导入android.view.view;
导入android.widget.AdapterView;
导入android.widget.ArrayAdapter;
导入android.widget.Button;
导入android.widget.ListView;
导入android.widget.TextView;
导入android.widget.Toast;
导入java.io.IOException;
导入java.util.UUID;
公共类newConnection扩展了活动{
私有静态最终整数请求_ENABLE_BT=1;
ListView listDevicesFound;
按钮式btnScanDevice;
文本视图状态蓝牙;
蓝牙适配器;
ArrayAdapter btArrayAdapter;
//通用UUID
私有静态最终UUID myUUID=UUID.fromString(“00001101-0000-1000-8000-00805f9b34fb”);
//蓝牙设备MAC地址
私有静态字符串地址=“20:00:06:08:10:40”;
ThreadConnectBTDevice myThreadConnectBTDevice;
/**在首次创建活动时调用*/
@凌驾
创建时的公共void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.newconnection);
btnScanDevice=(按钮)findViewById(R.id.scandevice);
stateBluetooth=(TextView)findViewById(R.id.bluetoothstate);
bluetoothAdapter=bluetoothAdapter.getDefaultAdapter();
listDevicesFound=(ListView)findViewById(R.id.devicesfound);
btArrayAdapter=newarrayadapter(newConnection.this,android.R.layout.simple\u list\u item\u 1);
listDevicesFound.setAdapter(btArrayAdapter);
listDevicesFound.setOnItemClickListener(新的AdapterView.OnItemClickListener(){
@凌驾
public void onItemClick(AdapterView父对象、视图、整型位置、长id){
BluetoothDevice=(BluetoothDevice)父级.getItemAtPosition(位置);
Toast.makeText(newConnection.this,“名称:”+device.getName()+“\n”
+地址:“+device.getAddress()+”\n
+绑定状态:“+device.getBondState()+”\n
+“蓝牙类:”+设备。getBluetoothClass()+“\n”
+类:“+device.getClass(),Toast.LENGTH_LONG.show();
myThreadConnectBTDevice=新的ThreadConnectBTDevice(设备);
myThreadConnectBTDevice.start();
}
});
CheckBlueToothState();
btnScanDevice.setOnClickListener(btnscandeviceonConClickListener);
registerReceiver(ActionFoundReceiver,
新的IntentFilter(BluetoothDevice.ACTION_FOUND));
}
私有类ThreadConnectBTDevice扩展线程{
私有BluetoothSocket BluetoothSocket=null;
私有BluetoothDevice设备=bluetoothAdapter.getRemoteDevice(地址);
公共线程连接设备(蓝牙设备){
试一试{
bluetoothsocket=device.createrFComSocketToServiceRecord(myUUID);
stateBluetooth.setText(“蓝牙插座:“+bluetoothsocket”);
}捕获(IOE异常){
e、 printStackTrace();
}
bluetoothAdapter.cancelDiscovery();
试一试{
bluetoothsocket.connect();
statebooth.setText(“已建立连接!”);
}捕获(IOE异常){
试一试{
bluetoothsocket.close();
}捕获(IOEE异常){
stateBooth.setText(“连接失败时无法关闭套接字。”+ee.getMessage());
}
}
}
}
@凌驾
受保护的空onDestroy(){
//TODO自动生成的方法存根
super.ondestory();
未注册接收人(ActionFoundReceiver);
}
私有void CheckBlueToothState(){
if(bluetoothAdapter==null){
stateBluetooth.setText(“蓝牙不支持”);
}否则{
if(bluetoothAdapter.isEnabled()){
if(bluetoothAdapter.isDiscovering()){
statebooth.setText(“蓝牙当前正在设备发现过程中。”);
}否则{
stateBluetooth.setText(“蓝牙已启用”);
btnScanDevice.setEnabled(true);
}
}否则{
statebooth.setText(“蓝牙未启用!”);
Intent enablebintent=新意图(BluetoothAdapter.ACTION\u REQUEST\u ENABLE);
startActivityForResult(启用BTIntent、请求\启用\ BT);
}
}
}
private Button.OnClickListener BTNSCandeviceonConClickListener
=新建按钮。OnClickListener(){
@凌驾
公共void onClick(视图arg0){
//TODO自动生成的方法存根
btArrayAdapter.clear();
bluetoothAdapter.startDiscovery();
}};
@凌驾
受保护的void onActivityResult(int请求代码、int结果代码、意图数据){
//TODO自动生成的方法存根
if(requestCode==请求启用){
CheckBlueToothState();
}
}
private final BroadcastReceiver ActionFoundReceiver=new BroadcastReceiver(){
@凌驾
公共void onReceive(上下文、意图){
//TODO自动生成的方法存根
String action=intent.getAction();
如果(蓝色)
   BluetoothDevice device = (BluetoothDevice)parent.getItemAtPosition(position);
    String tmp = (String) parent.getItemAtPosition(position);
    BluetoothDevice device = mBluetoothAdapter.getRemoteDevice(tmp.split("\n")[1]);