L
Lybrial
Neues Mitglied
- 0
Hallo,
ich kämpfe nun seit zwei Tagen mit Android und Bluetooth. In dieser Zeit
habe ich folgendes erreicht:
Das finden der gekoppelten bzw. der neuen Geräte habe ich wie folgt realisiert:
Nun bekomme ich also in meiner aufrufenden Activity den Namen und
die Adresse des gewählten Bluetooth Gerätes:
Nur von hier aus weiß ich leider nicht mehr weiter. Das Gerät mit dem meine
App verbunden werden soll ist ausgewählt, nur weiß ich leider nicht wie ich
jetzt von meiner App aus eine Verbindung zu dem gewählten Gerät erzeuge.
Außerdem möchte ich das Gerät dann auch irgendwie speichern können und
eventuell automatisch verbinden, immer dann, wenn das Gerät wieder in
Reichweite ist.
Ich muss an das Gerät dann Nachrichten schicken, immer zwei Strings im
Abstand von 500ms.
Wie kann ich diese Dinge erreichen?
ich kämpfe nun seit zwei Tagen mit Android und Bluetooth. In dieser Zeit
habe ich folgendes erreicht:
- Ich kann Bluetooth aus meiner App heraus aktivieren
- Ich kann gekoppelte Bluetooth Geräte finden
- Ich kann neue Bluetooth Geräte finden
Das finden der gekoppelten bzw. der neuen Geräte habe ich wie folgt realisiert:
Code:
public class BluetoothFragment extends BaseFragment implements OnItemClickListener, OnClickListener {
public static String EXTRA_DEVICE_NAME = "device_name";
public static String EXTRA_DEVICE_ADDRESS = "device_address";
private TextView textViewPairedDevices = null;
private ListView listViewPairedDevices = null;
private ArrayAdapter<String> adapterPairedDevices = null;
private TextView textViewNewDevices = null;
private ListView listViewNewDevices = null;
private ArrayAdapter<String> adapterNewDevices = null;
private Button buttonScan = null;
private BluetoothBroadcastReceiver bluetoothBroadcastReceiver = null;
private BluetoothAdapter bluetoothAdapter = null;
private Set<BluetoothDevice> pairedDevices = null;
private Set<String> newDevices = null;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
return inflater.inflate(R.layout.activity_bluetooth_fragment, container, false);
}
@Override
public void onViewCreated(View view, Bundle savedInstanceState) {
super.onViewCreated(view, savedInstanceState);
this.getActivity().setResult(Activity.RESULT_CANCELED);
this.adapterPairedDevices = new ArrayAdapter<String>(this.getActivity(), R.layout.activity_bluetooth_fragment_device);
this.adapterNewDevices = new ArrayAdapter<String>(this.getActivity(), R.layout.activity_bluetooth_fragment_device);
this.textViewPairedDevices = (TextView) view.findViewById(R.id.bluetooth_textview_paired_devices);
this.textViewNewDevices = (TextView) view.findViewById(R.id.bluetooth_textview_new_devices);
this.listViewPairedDevices = (ListView) view.findViewById(R.id.bluetooth_listview_paired_devices);
this.listViewPairedDevices.setAdapter(this.adapterPairedDevices);
this.listViewPairedDevices.setOnItemClickListener(this);
this.listViewNewDevices = (ListView) view.findViewById(R.id.bluetooth_listview_new_devices);
this.listViewNewDevices.setAdapter(this.adapterNewDevices);
this.listViewNewDevices.setOnItemClickListener(this);
this.buttonScan = (Button) view.findViewById(R.id.bluetooth_button_scan);
this.buttonScan.setOnClickListener(this);
}
/**
*
*/
@Override
public void onResume() {
super.onResume();
this.init();
if (this.bluetoothAdapter.getState() == BluetoothAdapter.STATE_OFF) {
this.getActivity().finish();
}
}
/**
*
*/
@Override
public void onPause() {
super.onPause();
if (this.bluetoothAdapter != null) {
this.bluetoothAdapter.cancelDiscovery();
}
this.getActivity().unregisterReceiver(this.bluetoothBroadcastReceiver);
}
/**
*
*/
@Override
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
this.bluetoothAdapter.cancelDiscovery();
String info = ((TextView) view).getText().toString();
if (info != null) {
String[] infos = info.split("\n");
String name= infos[0];
String address = infos[1];
Intent intent = new Intent();
intent.putExtra(EXTRA_DEVICE_NAME, name);
intent.putExtra(EXTRA_DEVICE_ADDRESS, address);
this.getActivity().setResult(Activity.RESULT_OK, intent);
this.getActivity().finish();
}
}
@Override
public void onClick(View view) {
switch(view.getId()) {
case R.id.bluetooth_button_scan : {
this.startDiscovery();
this.buttonScan.setVisibility(View.GONE);
} break;
}
}
private void init() {
this.bluetoothBroadcastReceiver = new BluetoothBroadcastReceiver();
IntentFilter filter = new IntentFilter();
filter.addAction(BluetoothDevice.ACTION_FOUND);
filter.addAction(BluetoothAdapter.ACTION_STATE_CHANGED);
filter.addAction(BluetoothAdapter.ACTION_DISCOVERY_FINISHED);
this.getActivity().registerReceiver(this.bluetoothBroadcastReceiver, filter);
this.bluetoothAdapter = BluetoothAdapter.getDefaultAdapter();
this.newDevices = new HashSet<String>();
this.pairedDevices = this.bluetoothAdapter.getBondedDevices();
if(this.pairedDevices != null && !this.pairedDevices.isEmpty()) {
this.textViewPairedDevices.setVisibility(View.VISIBLE);
for(BluetoothDevice bluetoothDevice : this.pairedDevices) {
this.adapterPairedDevices.add(bluetoothDevice.getName() + "\n" + bluetoothDevice.getAddress());
}
} else {
this.adapterPairedDevices.add(this.getResources().getText(R.string.text_no_paired_devices).toString());
}
}
private void startDiscovery() {
this.adapterNewDevices.clear();
this.newDevices.clear();
this.getActivity().setProgressBarIndeterminateVisibility(true);
this.getActivity().setTitle(this.getStringScanning());
this.textViewNewDevices.setVisibility(View.VISIBLE);
if (this.bluetoothAdapter.isDiscovering()) {
this.bluetoothAdapter.cancelDiscovery();
}
this.bluetoothAdapter.startDiscovery();
}
private class BluetoothBroadcastReceiver extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
String action = intent.getAction();
if (action.equals(BluetoothAdapter.ACTION_STATE_CHANGED)) {
if (bluetoothAdapter.getState() == BluetoothAdapter.STATE_OFF) {
getActivity().finish();
}
} else if(action.equals(BluetoothAdapter.ACTION_DISCOVERY_FINISHED)){
getActivity().setProgressBarIndeterminateVisibility(false);
getActivity().setTitle(getStringSelect());
if (newDevices.isEmpty()) {
adapterNewDevices.clear();
adapterNewDevices.add(getStringNoDevices());
}
buttonScan.setVisibility(View.VISIBLE);
} else if(action.equals(BluetoothDevice.ACTION_FOUND)) {
BluetoothDevice bluetoothDevice = intent.getParcelableExtra(BluetoothDevice.EXTRA_DEVICE);
if (bluetoothDevice != null) {
String address = bluetoothDevice.getAddress();
if (!newDevices.contains(address)) {
newDevices.add(address);
adapterNewDevices.add(bluetoothDevice.getName() + "\n" + bluetoothDevice.getAddress());
}
} else {}
}
}
};
}
Nun bekomme ich also in meiner aufrufenden Activity den Namen und
die Adresse des gewählten Bluetooth Gerätes:
Code:
@Override
public void onActivityResult(int requestCode, int resultCode, Intent data) {
if (requestCode == ENABLE_BLUETOOTH_REQUEST) {
if (this.bluetoothAdapter.isEnabled()) {
this.startDeviceListActivity();
} else {
if(!bluetoothDialog) {
this.showBluetoothEnableDialog();
}
}
} else if(requestCode == CONNECT_BLUETOOTH_REQUEST) {
if (resultCode == Activity.RESULT_OK) {
String name = data.getStringExtra(BluetoothFragment.EXTRA_DEVICE_NAME);
String address = data.getStringExtra(BluetoothFragment.EXTRA_DEVICE_ADDRESS);
Log.v("MainFragment", name + ": " + address);
}
}
}
Nur von hier aus weiß ich leider nicht mehr weiter. Das Gerät mit dem meine
App verbunden werden soll ist ausgewählt, nur weiß ich leider nicht wie ich
jetzt von meiner App aus eine Verbindung zu dem gewählten Gerät erzeuge.
Außerdem möchte ich das Gerät dann auch irgendwie speichern können und
eventuell automatisch verbinden, immer dann, wenn das Gerät wieder in
Reichweite ist.
Ich muss an das Gerät dann Nachrichten schicken, immer zwei Strings im
Abstand von 500ms.
Wie kann ich diese Dinge erreichen?