import android.content.Context;
import android.content.Intent;
import android.content.IntentFilter;
+import android.util.Log;
public class CaEdrInterface {
private static Context mContext;
+ private static volatile boolean isEdrInitialized = false;
private CaEdrInterface(Context context) {
- mContext = context;
- registerIntentFilter();
+ synchronized(CaEdrInterface.class) {
+ mContext = context;
+ }
+ if (!isEdrInitialized) {
+ registerIntentFilter();
+ isEdrInitialized = true;
+ }
}
private static IntentFilter registerIntentFilter() {
IntentFilter filter = new IntentFilter();
filter.addAction(BluetoothAdapter.ACTION_STATE_CHANGED);
filter.addAction(BluetoothDevice.ACTION_BOND_STATE_CHANGED);
+ filter.addAction(BluetoothDevice.ACTION_ACL_DISCONNECTED);
mContext.registerReceiver(mReceiver, filter);
return filter;
}
public static void destroyEdrInterface() {
- mContext.unregisterReceiver(mReceiver);
+ if (isEdrInitialized) {
+ mContext.unregisterReceiver(mReceiver);
+ isEdrInitialized = false;
+ }
}
// Network Monitor
private native static void caEdrBondStateChangedCallback(String addr);
+ private native static void caEdrConnectionStateChangedCallback(String addr, int isConnected);
+
private static final BroadcastReceiver mReceiver = new BroadcastReceiver() {
@Override
}
}
}
+
+ if (action != null && action.equals(BluetoothDevice.ACTION_ACL_DISCONNECTED)) {
+ BluetoothDevice device
+ = intent.getParcelableExtra(BluetoothDevice.EXTRA_DEVICE);
+ if (BluetoothDevice.DEVICE_TYPE_CLASSIC == device.getType())
+ {
+ caEdrConnectionStateChangedCallback(device.getAddress(), 0);
+ }
+ }
}
};
}