2016-04-29 81 views
0

这是我的:bluetooth.java。当我测试我的应用程序时,它跳出了这个错误“线程已经启动,然后我不能再发送我的数据,然后我离开我的应用程序,然后我再次启动我的应用程序,然后它允许我使用应用程序。 。 如此混乱 我希望你能帮助我 感谢您的帮助线程已经启动 - 通过蓝牙传输数据

public class bluetooth extends AppCompatActivity { 

// SPP UUID service 
private static final UUID MY_UUID = UUID.fromString("00001101-0000-1000-8000-00805F9B34FB"); 
// MAC-address of Bluetooth module (you must edit this line) 
private static String address ; 
@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_bluetooth); 
    on = (ImageView) findViewById(R.id.btn_enable); 
    find = (ImageView) findViewById(R.id.btn_scan); 
    mPairedBtn = (ImageView) findViewById(R.id.btn_view_paired); 
    BA = BluetoothAdapter.getDefaultAdapter(); 
    mProgressDlg = new ProgressDialog(this); 
    back =(ImageView) findViewById(R.id.backblue); 
    ontext = (TextView) findViewById(R.id.connecttext); 

    back.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View v) { 
      Intent intent = new Intent(bluetooth.this,MainActivity.class); 
      startActivity(intent); 
     } 
    }); 



    //xử lí các nút 
    if (BA == null) { 
     showUnsupported(); 
    } else { 
     mPairedBtn.setOnClickListener(new View.OnClickListener() { 
      @Override 
      public void onClick(View v) { 
       Set<BluetoothDevice> pairedDevices = BA.getBondedDevices(); 

       if (pairedDevices == null || pairedDevices.size() == 0) { 
        showToast("No Paired Devices Found"); 
       } else { 
        ArrayList<BluetoothDevice> list = new ArrayList<BluetoothDevice>(); 

        list.addAll(pairedDevices); 

        Intent intent = new Intent(bluetooth.this, DeviceListActivity.class); 

        intent.putParcelableArrayListExtra("device.list", list); 

        startActivity(intent); 
       } 
      } 
     }); 

     find.setOnClickListener(new View.OnClickListener() { 
      @Override 
      public void onClick(View arg0) { 
       BA.startDiscovery(); 
      } 
     }); 

     on.setOnClickListener(new View.OnClickListener() { 
      @Override 
      public void onClick(View v) { 
       if (BA.isEnabled()) { 
        BA.disable(); 
        showDisabled(); 
        /* try 
        { 
         btSocket.close(); 
        } catch (IOException e2) 
        { 

        }*/ 
        on.setImageResource(R.drawable.offlight); 

       } else { 
        Intent intent = new Intent(BluetoothAdapter.ACTION_REQUEST_ENABLE); 

        startActivityForResult(intent, 1000); 

        on.setImageResource(R.drawable.onlight); 

       } 
      } 
     }); 

     if (BA.isEnabled()) { 
      showEnabled(); 

     } else { 
      showDisabled(); 
     } 
    } 

    //thong bao cho may la chuong trinh nay co he su dung dc gi bluetooth 
    IntentFilter filter = new IntentFilter(); 

    filter.addAction(BluetoothAdapter.ACTION_STATE_CHANGED); 
    filter.addAction(BluetoothDevice.ACTION_FOUND); 
    filter.addAction(BluetoothAdapter.ACTION_DISCOVERY_STARTED); 
    filter.addAction(BluetoothAdapter.ACTION_DISCOVERY_FINISHED); 
    /* BroadcastReceiver dùng để nhận các intent từ hệ thống hoặc trao đổi dữ liệu giữa hai hay nhiều ứng dụng.*/ 
    registerReceiver(mReceiver, filter); 


    // MAC-address of Bluetooth module (you must edit this line) 
    address = "30:14:10:09:07:86"; 

    //create device and set the MAC address 
    BluetoothDevice device = BA.getRemoteDevice(address); 

    try { 
     btSocket = createBluetoothSocket(device); 
    } catch (IOException e) { 
     Toast.makeText(getBaseContext(), "Socket creation failed", Toast.LENGTH_LONG).show(); 
    } 
    // Establish the Bluetooth socket connection. 
    //btSocket.connect(); 
    try 
    { 
     btSocket.connect(); 
    } catch (IOException e) { 
     try 
     { 
      btSocket.close(); 
     } catch (IOException e2) 
     { 
      //insert code to deal with this 
      Toast.makeText(getApplicationContext(),"cant do this",Toast.LENGTH_LONG).show(); 
     } 
    } 

    ConnectedThread.createInstance(btSocket); 


    //I send a character when resuming.beginning transmission to check device is connected 
    //If it is not an exception will be thrown in the write method and finish() will be called 
    if(ConnectedThread.getInstance()!= null){ 
     ConnectedThread.getInstance().start(); 
    }else { 
     ConnectedThread.getInstance().cancel(); 
    } 


} 

@Override 
public void onResume() { 
    super.onResume(); 



} 

private BluetoothSocket createBluetoothSocket(BluetoothDevice device) throws IOException { 

    return device.createRfcommSocketToServiceRecord(MY_UUID); 
    //creates secure outgoing connecetion with BT device using UUID 
} 

@Override 
public void onPause() { 
    super.onPause(); 

} 

@Override 
public void onDestroy() { 
    unregisterReceiver(mReceiver); 
    super.onDestroy(); 
} 




private final BroadcastReceiver mReceiver = new BroadcastReceiver() { 
    public void onReceive(Context context, Intent intent) { 
     String action = intent.getAction(); 

     if (BluetoothAdapter.ACTION_STATE_CHANGED.equals(action)) { 
      final int state = intent.getIntExtra(BluetoothAdapter.EXTRA_STATE, BluetoothAdapter.ERROR); 

      if (state == BluetoothAdapter.STATE_ON) { 
       showToast("Enabled"); 

       showEnabled(); 
      } 
     } else if (BluetoothAdapter.ACTION_DISCOVERY_STARTED.equals(action)) { 
      mDeviceList = new ArrayList<BluetoothDevice>(); 

      mProgressDlg.show(); 
     } else if (BluetoothAdapter.ACTION_DISCOVERY_FINISHED.equals(action)) { 
      mProgressDlg.dismiss(); 

      Intent newIntent = new Intent(bluetooth.this, DeviceListActivity.class); 

      newIntent.putParcelableArrayListExtra("device.list", mDeviceList); 

      startActivity(newIntent); 
     } else if (BluetoothDevice.ACTION_FOUND.equals(action)) { 
      BluetoothDevice device = (BluetoothDevice) intent.getParcelableExtra(BluetoothDevice.EXTRA_DEVICE); 

      mDeviceList.add(device); 

      showToast("Found device " + device.getName()); 
     } 
    } 
}; 

}

+0

你试图连接到什么样的蓝牙模块? –

+0

@ A.Omar:hc 05(含aduino) –

回答

1

这是我做了一个库,你可能想给它一个镜头:。

https://github.com/omaflak/Bluetooth-Android

它与HC-06完美配合,对您来说应该是一样的。这是我如何使用类:

Bluetooth bt = new Bluetooth(); 
bt.enableBluetooth(); 

bt.setBluetoothCallback(new Bluetooth.BluetoothCallback() { 
    @Override 
    public void onConnect(BluetoothDevice device) { 
     bt.send("hello world!"); 
    } 

    @Override 
    public void onDisconnect(BluetoothDevice device, String message) { 
     Log.e(TAG, "Disconnected!"); 
    } 

    @Override 
    public void onMessage(String message) { 
     Log.e(TAG, "Received: "+message); 
    } 

    @Override 
    public void onError(String message) { 
     Log.e(TAG, "Error: "+message); 
    } 

    @Override 
    public void onConnectError(BluetoothDevice device, String message) { 
     Log.e(TAG, message); 
     bt.connectToDevice(device); // try to connect again 
    } 
}); 

/* 
    Connection... 
    /!\ you must be paired with the device via the settings app /!\ 
*/ 
bt.connectToName("HC-06"); 
//you can also connect with: bt.connectToAddress(address) and bt.connectToDevice(device) 

编辑:在Arduino的方面,你必须把\ n末每条消息。您可以简单地使用yourSerial.println(“消息”)。

EDIT2:你可以在这里找到我的Arduino代码:https://causeyourestuck.io/2015/12/14/communication-between-android-and-hc-06-module/