# MinewBeacon Android Software Development Kit Guide
# New Project
Android Studio Settings:
targetSdkVersion Version choose 21
Place the minewBeaconScan.jar into the libs folder, and then in the current project under the build.gradle file configuration items in the dependencies new content, as follows compile files ('libs / minewBeaconScan.jar').
Eclipse Settings:
targetSdkVersion Version choose 21
Place the scanBeacon.jar into the libs folder, right-click the project propeties, select Java build Path, add the minewBeaconScan.jar dependency in the Library option.
When the targetSdkVersion version is greater than or equal to 23, the need for dynamic application permissions.
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION"/>
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"/>
2
Permissions required for SDK:
<uses-permission android:name="android.permission.BLUETOOTH" />
<uses-permission android:name="android.permission.BLUETOOTH_ADMIN" />
<uses-feature android:name="android.hardware.bluetooth_le" android:required="true"/>
The corresponding component registration under the AndroidManifest.xml file. As follows:
<service android:name="com.minew.beacon.ScanService"/>
<receiver android:name="com.minew.beacon.BluetoothChangedReceiver">
<intent-filter>
<action android:name="android.bluetooth.adapter.action.STATE_CHANGED"/>
</intent-filter>
</receiver>
2
3
4
5
6
7
8
9
10
more details, please refer to demo.
# Start Developing
The MinewBeaconManager (as Manager below) is used to scan and stop scan the surrounding Bluetooth device, which generates a corresponding Minewbeacon (as Beacon below) instance for each Bluetooth device. When the Manager scans to a Bluetooth device, it continuously monitors the data update of the Bluetooth device and the status of the devices (the device with no data update in ten seconds is considered to be the device that disappeared and scanned for the first time Device is considered to be the device), while the Manager class can also monitor the Bluetooth state changes and call back to the corresponding proxy instance. The following is the relevant code.
1.get Manager instance and set call back listener:
MinewBeaconManager mMinewBeaconManager = MinewBeaconManager.getInstance(this);
mMinewBeaconManager.setDeviceManagerDelegateListener(new MinewBeaconManagerListener() {});
2
2.scan device:
mMinewBeaconManager.startScan();
3.update scanned devices:
// Get continuous device data update, this method callback once every 1 second, and only when the scan to the device will callback.
public void onRangeBeacons(final List<MinewBeacon> minewBeacons);
2
4.get data from MinewBeacon:
For the data versatility, we use the MinewBeaconValue (as BeaconValueIndex below) to unify all data types, value can correspond to the string, integer, float,boolean type, and so on.Each index corresponds to a value, as follows:
Get data from Beacon
// get uuid
mMinewBeacon.getBeaconValue(BeaconValueIndex.MinewBeaconValueIndex_UUID).getStringValue();
// get major
mMinewBeacon.getBeaconValue(BeaconValueIndex.MinewBeaconValueIndex_Major).getStringValue();
// get minor
mMinewBeacon.getBeaconValue(BeaconValueIndex.MinewBeaconValueIndex_Minor).getStringValue();
2
3
4
5
6
7
Schedule: ValueIndex and DataType
index | Data Name | Data Type | Remarks |
---|---|---|---|
BeaconValueIndex_UUID | uuid | stringValue | |
BeaconValueIndex_Name | Name | stringValue | |
BeaconValueIndex_Major | major | intValue | |
BeaconValueIndex_Minor | minor | intValue | |
BeaconValueIndex_WechatId | Wechat Id | intValue | Partial support |
BeaconValueIndex_Mac | mac address | stringValue | Partial support |
BeaconValueIndex_RSSI | rssi | intValue | |
BeaconValueIndex_BatteryLevel | battery | intValue | |
BeaconValueIndex_Temperature | temperature | floatValue | Partial support |
BeaconValueIndex_Humidity | humidity | floatValue**** | Partial support |
BeaconValueIndex_Txpower | txPower | intValue | |
BeaconValueIndex_InRange | range | boolValue | |
BeaconValueIndex_Connectable | connectable | boolValue |
Follow the corresponding index , get the desired data.
More Infomation,refer demo code
Listen range state
//If the device does not have data updates within 8 seconds, this device is considered to have disappeared and the device will disappear in this callback, this method every 5 seconds a cycle.
public void onDisappearBeacons(List<MinewBeacon> minewBeacons) {
for (MinewBeacon minewBeacon : minewBeacons) {
String deviceName = minewBeacon.getBeaconValue(BeaconValueIndex.MinewBeaconValueIndex_Name).getStringValue();
Toast.makeText(getApplicationContext(), deviceName + " out range", Toast.LENGTH_SHORT).show();
}
}
}
//The device that was first scanned or disapproved after being re-scanned is considered to be a new device, and the newly device will be in this callback, which is a cycle every 3 seconds.
public void onAppearBeacons(List<MinewBeacon> minewBeacons) {
}
2
3
4
5
6
7
8
9
10
11
12
13
14
Listen the status of the Bluetooth module updates, Bluetooth status a total of three:
BluetoothState:BluetoothStatePowerOn(bluetooth on),BluetoothStatePowerOff(bluetooth off),BluetoothStateNotSupport(not support bluetooth 4.0)
//Due to the user or the system changes the Bluetooth switch, can be monitored in the following ways:
public void onUpdateBluetoothState(BluetoothState state) {
}
2
3
4
Get bluetooth state by checkBluetoothState method:
BluetoothState bluetoothState = mMinewDeviceManager.checkBluetoothState();
# Class Description
# MinewBeacon
Every device corresponds to a MinewBeacon, and there is only one method for obtaining the information of the device through the corresponding Index:
public MinewBeaconValue getBeaconValue(NS_ENUM ns_enum);
Example,get UUID:
minewBeacon.getBeaconValue(NS_ENUM.MinewBeaconValueIndex_UUID).getStringValue;
// correspond Enum // !!!Data must be obtained for each device's data type
public enum BeaconValueIndex {
MinewBeaconValueIndex_UUID, // UUID
MinewBeaconValueIndex_Major, // major
MinewBeaconValueIndex_Minor, // minor
MinewBeaconValueIndex_Name, // name
MinewBeaconValueIndex_RSSI, // RSSI
MinewBeaconValueIndex_BatteryLevel, // battery
//MinewBeaconValueIndex_Temperature, // temperature Not available yet
//MinewBeaconValueIndex_Humidity, // humidity Not available yet
MinewBeaconValueIndex_TxPower, // TxPower
MinewBeaconValueIndex_InRage // in range
}
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
# MinewBeaconValue
MinewBeaconValue: Obtain all instances of this data from the device. Obtain data in strict accordance with the data type.
// int data
private int intValue;
// float data
private float floatValue;
// string data
private String stringValue;
//boolean data
private boolean bool;
// byte[] data
private byte[] dataValue;
# BluetoothState
public enum BluetoothState {
BluetoothStatePowerOn, //bluetooth on
BluetoothStatePowerOff, //bluetooth off
BluetoothStateNotSupported,//not support bluetooth 4.0
}
2
3
4
5
6
7
##MinewBeaconManagerListener
MinewBeaconManager Interface。
// Found the new devices, the function callback every 3 seconds
void onAppearBeacons(List<MinewBeacon> minewBeacons);
// When the device disappears, call back once every second.
void onDisappearBeacons(List<MinewBeacon> minewBeacons);
//Callback data update function, callback once per second
void onRangeBeacons(List<MinewBeacon> minewBeacons);
//Bluetooth state update
void onUpdateState(BluetoothState state);
##MinewBeaconManager Device management class, used to scan the device and update the device status. // MinewBeaconManagerListener Interface
public void setDeviceManagerDelegateListener(MinewBeaconManagerListener minewBeaconManagerListener) {
}
// instance
public static MinewBeaconManager getInstance(Context context) {}
// get bluetooth state
public BluetoothState checkBluetoothState() {}
// scan device
public void startScan() throws Exception {}
// stop scan
public void stopScan() {}
// all scanned devices
public static List<MinewBeacon> scannedBeacons;
// in range devices
public static List<MinewBeacon> inRangeBeacons;
# Changelog
# 2019.07.17
Fixed the exception for "java.lang.NegativeArraySizeException".
# 2018.11.20
Fixed bug for scanning.
# 2016.11.29
Add support for temperature and humidity sensor data.