1
0
mirror of https://github.com/oliexdev/openScale.git synced 2025-08-24 09:13:04 +02:00

experimental Bluetooth search with new API.

This commit is contained in:
OliE
2018-01-31 17:52:21 +01:00
parent 0f86826bda
commit 89c990a6b5
4 changed files with 56 additions and 47 deletions

View File

@@ -7,6 +7,7 @@
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/>
<uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED"/>
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION"/>
<uses-feature android:name="android.hardware.bluetooth_le" android:required="false"/>

View File

@@ -17,9 +17,12 @@ package com.health.openscale.gui.preferences;
import android.bluetooth.BluetoothAdapter;
import android.bluetooth.BluetoothDevice;
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.content.IntentFilter;
import android.content.SharedPreferences;
import android.os.Bundle;
import android.os.Handler;
import android.preference.CheckBoxPreference;
import android.preference.EditTextPreference;
import android.preference.ListPreference;
@@ -30,6 +33,7 @@ import android.preference.PreferenceGroup;
import android.preference.PreferenceManager;
import android.preference.PreferenceScreen;
import android.widget.BaseAdapter;
import android.widget.Toast;
import com.health.openscale.R;
import com.health.openscale.core.bluetooth.BluetoothCommunication;
@@ -50,66 +54,70 @@ public class BluetoothPreferences extends PreferenceFragment implements SharedPr
private PreferenceScreen btScanner;
private BluetoothAdapter btAdapter = null;
private Handler searchHandler = null;
private BluetoothAdapter.LeScanCallback scanCallback = null;
private Map<String, String> foundDevices = new HashMap<>();
public void startSearching() {
foundDevices.clear();
if (scanCallback == null)
{
scanCallback = new BluetoothAdapter.LeScanCallback()
{
@Override
public void onLeScan(final BluetoothDevice device, int rssi, byte[] scanRecord) {
if (device.getName() == null) {
return;
}
foundDevices.put(device.getAddress(), device.getName());
IntentFilter filter = new IntentFilter();
btScanner.removeAll();
filter.addAction(BluetoothDevice.ACTION_FOUND);
filter.addAction(BluetoothAdapter.ACTION_DISCOVERY_STARTED);
filter.addAction(BluetoothAdapter.ACTION_DISCOVERY_FINISHED);
for (Map.Entry<String, String> entry : foundDevices.entrySet())
{
if (getActivity() != null) {
Preference prefBtDevice = new Preference(getActivity().getBaseContext());
prefBtDevice.setSummary(entry.getKey());
getActivity().registerReceiver(mReceiver, filter);
btAdapter.startDiscovery();
}
for (BluetoothCommunication.BT_DEVICE_ID btScaleID : BluetoothCommunication.BT_DEVICE_ID.values()) {
BluetoothCommunication btDevice = BluetoothCommunication.getBtDevice(getActivity().getBaseContext(), btScaleID);
private final BroadcastReceiver mReceiver = new BroadcastReceiver() {
public void onReceive(Context context, Intent intent) {
String action = intent.getAction();
if (btDevice.checkDeviceName(entry.getValue())) {
prefBtDevice.setOnPreferenceClickListener(new onClickListenerDeviceSelect());
prefBtDevice.setKey(entry.getKey());
prefBtDevice.setIcon(R.drawable.ic_bluetooth_connection_lost);
prefBtDevice.setTitle(entry.getValue() + " [" + btDevice.deviceName() + "]");
break;
} else {
prefBtDevice.setIcon(R.drawable.ic_bluetooth_disabled);
prefBtDevice.setTitle(entry.getValue() + " [" + getResources().getString(R.string.label_bt_device_no_support) + "]");
}
if (BluetoothAdapter.ACTION_DISCOVERY_STARTED.equals(action)) {
//discovery starts, we can show progress dialog or perform other tasks
Toast.makeText(getActivity().getApplicationContext(), R.string.label_bluetooth_searching, Toast.LENGTH_SHORT).show();
} else if (BluetoothAdapter.ACTION_DISCOVERY_FINISHED.equals(action)) {
//discovery finishes, dismis progress dialog
Toast.makeText(getActivity().getApplicationContext(), R.string.label_bluetooth_searching_finished, Toast.LENGTH_SHORT).show();
} else if (BluetoothDevice.ACTION_FOUND.equals(action)) {
//bluetooth device found
BluetoothDevice device = (BluetoothDevice) intent.getParcelableExtra(BluetoothDevice.EXTRA_DEVICE);
foundDevices.put(device.getAddress(), device.getName());
for (Map.Entry<String, String> entry : foundDevices.entrySet()) {
if (getActivity() != null) {
Preference prefBtDevice = new Preference(getActivity().getBaseContext());
prefBtDevice.setSummary(entry.getKey());
for (BluetoothCommunication.BT_DEVICE_ID btScaleID : BluetoothCommunication.BT_DEVICE_ID.values()) {
BluetoothCommunication btDevice = BluetoothCommunication.getBtDevice(getActivity().getBaseContext(), btScaleID);
if (btDevice.checkDeviceName(entry.getValue())) {
prefBtDevice.setOnPreferenceClickListener(new onClickListenerDeviceSelect());
prefBtDevice.setKey(entry.getKey());
prefBtDevice.setIcon(R.drawable.ic_bluetooth_connection_lost);
prefBtDevice.setTitle(entry.getValue() + " [" + btDevice.deviceName() + "]");
break;
} else {
prefBtDevice.setIcon(R.drawable.ic_bluetooth_disabled);
prefBtDevice.setTitle(entry.getValue() + " [" + getResources().getString(R.string.label_bt_device_no_support) + "]");
}
btScanner.addPreference(prefBtDevice);
}
btScanner.addPreference(prefBtDevice);
}
}
};
}
searchHandler.postDelayed(new Runnable()
{
@Override
public void run()
{
btAdapter.stopLeScan(scanCallback);
}
}, 10000);
}
};
btAdapter.startLeScan(scanCallback);
@Override
public void onDestroy() {
getActivity().unregisterReceiver(mReceiver);
super.onDestroy();
}
@Override
@@ -117,7 +125,6 @@ public class BluetoothPreferences extends PreferenceFragment implements SharedPr
super.onCreate(savedInstanceState);
btAdapter = BluetoothAdapter.getDefaultAdapter();
searchHandler = new Handler();
addPreferencesFromResource(R.xml.bluetooth_preferences);

View File

@@ -127,6 +127,7 @@
<string name="label_bluetooth_title">Bluetooth</string>
<string name="label_bluetooth_enable">Search for scale on startup</string>
<string name="label_bluetooth_searching">Searching for Bluetooth scales</string>
<string name="label_bluetooth_searching_finished">Finished searching for Bluetooth scales</string>
<string name="label_device_type">Device Type</string>
<string name="label_enable_labels">Label on data point</string>

View File

@@ -4,7 +4,7 @@
android:key="btScanner"
android:title="@string/label_device_type"
android:persistent="false">
<Preference android:key="0" android:title="@string/label_bluetooth_searching"/>
<Preference android:key="0" android:title="@string/label_device_type"/>
</PreferenceScreen>
<CheckBoxPreference android:title="@string/label_bluetooth_enable" android:summaryOn="@string/info_is_enable" android:summaryOff="@string/info_is_not_enable" android:key="btEnable" android:defaultValue="false"/>
<CheckBoxPreference android:title="@string/label_smartUserAssign" android:summaryOn="@string/info_is_enable" android:summaryOff="@string/info_is_not_enable" android:key="smartUserAssign" android:defaultValue="false"/>