0

AndroidでBluetoothGatt APIを使用してプログラムでBle iBeaconとペアリングしようとしています.Ble iBeaconとロリポップまでペアリングできます.しかし、マシュマロでペアリングできません(私のテストデバイスはoneplus 3です).altbeaconライブラリを使用していますビーコンスキャン。

また、マニフェスト ファイルで ACCESS_COARSE_LOCATION,ACCESS_FINE_LOCATION 権限を付与し、GPS 位置情報をオンにしました。

private BluetoothGatt mGatt;
BluetoothAdapter baBluetoothAdapter;
@Override
protected void onCreate(Bundle savedInstanceState) {
    baBluetoothAdapter = BluetoothAdapter.getDefaultAdapter();
    intentFilter = new IntentFilter();
    intentFilter.addAction(BluetoothDevice.ACTION_BOND_STATE_CHANGED);       
    registerReceiver(myReceiver, intentFilter);
}

ここでビーコンのMAC IDを送信しています

public void PairToDevice(String sMacId) {

   BluetoothDevice device = baBluetoothAdapter.getRemoteDevice(sMacId);      

    if (mGatt == null) {
        mGatt = device.connectGatt(this, false, gattCallback);
    }
}
private final BluetoothGattCallback gattCallback = new BluetoothGattCallback() {
    @Override
    public void onConnectionStateChange(BluetoothGatt gatt, int status, int newState) {
        Log.i("onConnectionStateChange", "Status: " + status);
        switch (newState) {
            case BluetoothProfile.STATE_CONNECTED:
                Log.e("gattCallback", "STATE_CONNECTED");
                gatt.discoverServices();
                break;
            case BluetoothProfile.STATE_DISCONNECTED:
                Log.e("gattCallback", "STATE_DISCONNECTED");
                break;
            default:
                Log.e("gattCallback", "STATE_OTHER");
        }
    }

    @Override
    public void onCharacteristicChanged(BluetoothGatt gatt, BluetoothGattCharacteristic characteristic) {
        super.onCharacteristicChanged(gatt, characteristic);
    }

    @Override
    public void onServicesDiscovered(BluetoothGatt gatt, int status) {

    }
}

ここで結合状態をチェックしています。マシュマロでは結合状態は常になしですが、マシュマロ未満では正常に動作しています。

private BroadcastReceiver myReceiver = new BroadcastReceiver() {
    @Override
    public void onReceive(Context context, Intent intent) {
        String action = intent.getAction();
        if (BluetoothDevice.ACTION_BOND_STATE_CHANGED.equals(action)) {
            BluetoothDevice device = intent.getParcelableExtra(BluetoothDevice.EXTRA_DEVICE);
            int nState = device.getBondState();

            if (nState == BluetoothDevice.BOND_BONDED) {
                Log.e("Bond Information", "device bonded");

            } else if (nState == BluetoothDevice.BOND_BONDING) {
                 Log.e("Bond Information", "device bonding");
            } else if (nState == BluetoothDevice.BOND_NONE) {
                 Log.e("Bond Information", "bond none");
            }
        }
    }
};
4

0 に答える 0