So verbinden Sie das Bluetooth-Gerät, indem Sie auf das Element der listview in Android?
Ich entwickle eine Anwendung, wo ich eine Verbindung zu Bluetooth-Gerät auf Android 4.3.
Ich kann Scannen Sie das bluetooth-Gerät, aber es kann nicht verbinden Sie das bluetooth-Gerät.
Habe ich schon fügen Sie die permission im Manifest der folgenden:
<uses-permission android:name="android.permission.BLUETOOTH_ADMIN" />
<uses-permission android:name="android.permission.BLUETOOTH" />
Meine Operation ist, wenn ich die push-SCAN-Taste Scannen Sie das Bluetooth-Gerät und zeigen Sie auf das ListView.
Wenn ich auf das bluetooth-Gerät auf ListView,es wird schließen Sie das bluetooth-Gerät von Element.
Aber wenn ich auf das Gerät, die app zum Absturz bringen, und ich weiß nicht warum...
Dies ist mein java code:
package com.example.preventthelost;
import java.io.IOException;
import java.net.Socket;
import java.util.Set;
import java.util.UUID;
import android.os.Bundle;
import android.app.Activity;
import android.app.AlertDialog;
import android.bluetooth.BluetoothAdapter;
import android.bluetooth.BluetoothDevice;
import android.bluetooth.BluetoothSocket;
import android.widget.AdapterView;
import android.widget.AdapterView.OnItemClickListener;
import android.widget.ArrayAdapter;
import android.widget.Button;
import android.widget.ListView;
import android.widget.TextView;
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.DialogInterface;
import android.content.Intent;
import android.content.IntentFilter;
import android.util.Log;
import android.view.Menu;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Toast;
public class DeviceList extends Activity {
protected static final String tag = "TAG";
private BluetoothAdapter mBluetoothAdapter;
private static final int REQUEST_ENABLE_BT=1;
private Button btn_cancel;
private Button btn_scan;
private ListView pair_devices_list;
private ListView new_devices_list;
private Set<BluetoothDevice> pairedDevice;
private ArrayAdapter<String> newDevicelistArrayAdapter;
private ArrayAdapter<String> pairDevicelistArrayAdapter;
private final UUID my_UUID = UUID.fromString("00001802-0000-1000-8000-00805f9b34fb");
//private final UUID my_UUID = UUID.fromString("00001101-0000-1000-8000-00805F9B34FB");
private BluetoothSocket socket;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.device_list);
btn_scan = (Button)findViewById(R.id.btn_scan);
newDevicelistArrayAdapter = new ArrayAdapter<String>(this, R.layout.device_name);
new_devices_list = (ListView)findViewById(R.id.new_devices_list);
new_devices_list.setAdapter(newDevicelistArrayAdapter);
**//check device support bluetooth or not**
mBluetoothAdapter = BluetoothAdapter.getDefaultAdapter();
if(mBluetoothAdapter == null) {
Toast.makeText(this, "No support bluetooth", Toast.LENGTH_SHORT).show();
finish();
return;
}else if(!mBluetoothAdapter.isEnabled()){ **//if bluetooth is close, than open it**
Intent enableBTIntent = new Intent(BluetoothAdapter.ACTION_REQUEST_ENABLE);
startActivityForResult(enableBTIntent, REQUEST_ENABLE_BT);
}
**//click the scan button**
btn_scan.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
//TODO Auto-generated method stub
//**list the bluetooth device**
IntentFilter filter = new IntentFilter(BluetoothDevice.ACTION_FOUND);
registerReceiver(mReceiver, filter);
mBluetoothAdapter.startDiscovery();
newDevicelistArrayAdapter.clear();
}
});
//new_devices_list click
new_devices_list.setOnItemClickListener(new OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> arg0, View arg1, int arg2,
long arg3) {
//TODO Auto-generated method stub
mBluetoothAdapter.cancelDiscovery();
final String info = ((TextView) arg1).getText().toString();
//get the device address when click the device item
String address = info.substring(info.length()-19);
//connect the device when item is click
BluetoothDevice connect_device = mBluetoothAdapter.getRemoteDevice(address);
try {
socket = connect_device.createRfcommSocketToServiceRecord(my_UUID);
socket.connect();
} catch (IOException e) {
//TODO Auto-generated catch block
e.printStackTrace();
}
}
});//************new_devices_list end
}
public final BroadcastReceiver mReceiver = 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 bdevice = intent.getParcelableExtra(BluetoothDevice.EXTRA_DEVICE);
//short rssi = intent.getExtras().getShort(BluetoothDevice.EXTRA_RSSI);;
if(bdevice.getBondState() != BluetoothDevice.BOND_BONDED)
newDevicelistArrayAdapter.add("\n" + bdevice.getName() + "\n" + bdevice.getAddress());
newDevicelistArrayAdapter.notifyDataSetChanged();
}
}
};
protected void onDestroy() {
super.onDestroy();
if(mBluetoothAdapter != null)
mBluetoothAdapter.cancelDiscovery();
unregisterReceiver(mReceiver);
}
public boolean onCreateOptionsMenu(Menu menu) {
//Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.device_list, menu);
return true;
}
}
geben, wenn ich die connect-code von folgenden in new_devices_list.setOnItemClickListener
es immer abstürzt.
//get the device address when click the device item
String address = info.substring(info.length()-19);
//connect the device when item is click
BluetoothDevice connect_device = mBluetoothAdapter.getRemoteDevice(address);
try {
socket = connect_device.createRfcommSocketToServiceRecord(my_UUID);
socket.connect();
} catch (IOException e) {
//TODO Auto-generated catch block
e.printStackTrace();
}
Ich bin mir nicht sicher, aber das problem Aussehen wie in dieser Zeile:
BluetoothDevice connect_device = mBluetoothAdapter.getRemoteDevice(address);
Den Datentyp der address
ist die String-eher-Adresse.
Aber die Art der getRemoteDevice ich wählen, String ist die Adresse.
ALSO...ich weiß nicht, Warum die app immer abstürzt, wenn ich die connect code in new_devices_list auch??
Tut, kann es nicht verwenden in Android 4.3 ??
Kann jemand mir beibringen??
Dank!!
Die logcat-show "xx:xx:xx:xx:xx:xx" ist kein Gültiger Bluetooth-Adresse das problem ist Also auf die Daten, die Art der Adresse aus, aber die Art der getRemoteDevice ich wählen, String ist die Adresse. Wie zu tun?
InformationsquelleAutor Wun | 2013-10-02
Du musst angemeldet sein, um einen Kommentar abzugeben.
Es war nicht klar, ob Sie eine Verbindung herstellen Bluetooth-Classic-oder einem Niedrig-Energie-Gerät. Dein code ist für die Klassische, die tag schlägt der Niedrigen Energie. Im Falle der Niedrigen Energie, die Sie verwenden würden,
statt
InformationsquelleAutor barbazoo
Wählen Sie Tag BluetoothLowEnergy. Deine Frage ist etwa von der BLE oder Bluetooth-standard? für die BLE-es ist ein anderer Ansatz zu verbinden. Sie können Lesen hier
InformationsquelleAutor Mike
Ich hatte ein ähnliches problem, aber nur eine Lösung gefunden.
Anstelle der Subtraktion 19 von
info.length()
imsubtrahieren 17 statt. Der original-Beitrag ist geschrieben vor fast einem Jahr, aber hoffentlich ist es noch hilfreich für diejenigen, die das gleiche problem haben.
InformationsquelleAutor KitKat