すべてのプロダクト
Search
ドキュメントセンター

Mobile Platform as a Service:Bluetooth API リスト

最終更新日:Jan 28, 2026

説明
  • Bluetooth API は mPaaS 10.1.60 以降のバージョンでサポートされています。

  • 現在、開発者ツールでのデバッグはサポートされていません。ミニプログラムの Bluetooth API を呼び出すには、実機を使用する必要があります。

my.openBluetoothAdapter

ミニプログラムの Bluetooth モジュールを初期化します。この初期化は、my.openBluetoothAdapter が呼び出されてから my.closeBluetoothAdapter が呼び出されるか、ミニプログラムが破棄されるまでの期間有効です。この期間中は、他のミニプログラムの Bluetooth API を呼び出したり、Bluetooth モジュールに関連する on イベントのコールバックを受信したりできます。

入力パラメーター

名前

必須

説明

autoClose

ブール値

いいえ

現在のページを離れるときに Bluetooth を自動的に切断するかどうかを指定します。指定しない場合、デフォルト値は true です。

重要

この機能は Android でのみサポートされています。

success

関数

いいえ

呼び出しが成功した場合のコールバック関数です。

fail

関数

いいえ

呼び出しが失敗した場合のコールバック関数です。

complete

関数

いいえ

呼び出しの成功、失敗にかかわらず、呼び出しの最後に実行されるコールバック関数です。

成功時の戻り値

名前

説明

isSupportBLE

ブール値

Bluetooth Low Energy (BLE) がサポートされているかどうかを示します。

エラーコードの説明

error

説明

ソリューション

12

Bluetooth が有効になっていません。

Bluetooth を有効にしてみてください。

13

システムサービスへの接続が一時的に失われました。

再接続を試みてください。

14

クライアントに Bluetooth を使用する権限がありません。

クライアントに Bluetooth の使用を許可してください。

15

不明なエラーです。

-

コード例

<!-- .axml-->
<view class="page">
  <view class="page-description">Bluetooth API</view>
  <view class="page-section">
    <view class="page-section-title">ローカル Bluetooth アダプターの状態</view>
    <view class="page-section-demo">
       <button type="primary" onTap="openBluetoothAdapter">Bluetooth の初期化</button>
       <button type="primary" onTap="closeBluetoothAdapter">ローカル Bluetooth を閉じる</button>
       <button type="primary" onTap="getBluetoothAdapterState">Bluetooth の状態を取得</button>
    </view>

    <view class="page-section-title">Bluetooth デバイスのスキャン</view>
    <view class="page-section-demo">
       <button type="primary" onTap="startBluetoothDevicesDiscovery">検索を開始</button>
       <button type="primary" onTap="getBluetoothDevices">検出されたすべてのデバイス</button>
       <button type="primary" onTap="getConnectedBluetoothDevices">接続済みのすべてのデバイス</button>
       <button type="primary" onTap="stopBluetoothDevicesDiscovery">検索を停止</button>
    </view>

    <view class="page-section-title">デバイスへの接続</view>
    <view class="page-section-demo">
       <input class="input" onInput="bindKeyInput" type="{{text}}" placeholder="接続するデバイスの deviceId を入力してください"></input>
       <button type="primary" onTap="connectBLEDevice">デバイスに接続</button>
       <button type="primary" onTap="getBLEDeviceServices">デバイスサービスを取得</button>
       <button type="primary" onTap="getBLEDeviceCharacteristics">読み取り/書き込みキャラクタリスティックを取得</button>
       <button type="primary" onTap="disconnectBLEDevice">デバイスから切断</button>
    </view>

     <view class="page-section-title">データの読み取りと書き込み</view>
     <view class="page-section-demo">
       <button type="primary" onTap="notifyBLECharacteristicValueChange">キャラクタリスティック値の変更をリッスン</button>
       <button type="primary" onTap="readBLECharacteristicValue">データを読み取り</button>
       <button type="primary" onTap="writeBLECharacteristicValue">データを書き込み</button>
       <button type="primary" onTap="offBLECharacteristicValueChange">キャラクタリスティック値リスナーをキャンセル</button>
    </view>

     <view class="page-section-title">その他のイベント</view>
     <view class="page-section-demo">
       <button type="primary" onTap="bluetoothAdapterStateChange">ローカル Bluetooth 状態の変更</button>
       <button type="primary" onTap="offBluetoothAdapterStateChange">ローカル Bluetooth 状態リスナーをキャンセル</button>
       <button type="primary" onTap="BLEConnectionStateChanged">Bluetooth 接続状態の変更</button>
       <button type="primary" onTap="offBLEConnectionStateChanged">Bluetooth 接続状態リスナーをキャンセル</button>

    </view>
  </view>
</view>
// .js
Page({
  data: {
    devid: '0D9C82AD-1CC0-414D-9526-119E08D28124',
    serid: 'FEE7',
    notifyId: '36F6',
    writeId: '36F5',
    charid: '',
    alldev: [{ deviceId: '' }],
  },
  // ローカル Bluetooth アダプターの状態を取得
  openBluetoothAdapter() {
    my.openBluetoothAdapter({
      success: res => {
        if (!res.isSupportBLE) {
          my.alert({ content: '申し訳ありませんが、ご利用の携帯電話では Bluetooth は利用できません。' });
          return;
        }
        my.alert({ content: '初期化に成功しました!' });
      },
      fail: error => {
        my.alert({ content: JSON.stringify(error) });
      },
    });
  },
  closeBluetoothAdapter() {
    my.closeBluetoothAdapter({
      success: () => {
        my.alert({ content: 'Bluetooth が正常に閉じられました!' });
      },
      fail: error => {
        my.alert({ content: JSON.stringify(error) });
      },
    });
  },
  getBluetoothAdapterState() {
    my.getBluetoothAdapterState({
      success: res => {
        if (!res.available) {
          my.alert({ content: '申し訳ありませんが、ご利用の携帯電話では Bluetooth は利用できません。' });
          return;
        }
        my.alert({ content: JSON.stringify(res) });
      },
      fail: error => {
        my.alert({ content: JSON.stringify(error) });
      },
    });
  },
  // Bluetooth デバイスのスキャン
  startBluetoothDevicesDiscovery() {
    my.startBluetoothDevicesDiscovery({
      allowDuplicatesKey: false,
      success: () => {
        my.onBluetoothDeviceFound({
          success: res => {
            // my.alert({content:'新しいデバイスをリッスンしています'+JSON.stringify(res)});
            var deviceArray = res.devices;
            for (var i = deviceArray.length - 1; i >= 0; i--) {
              var deviceObj = deviceArray[i];
              // デバイス名またはブロードキャストデータでターゲットデバイスを照合し、後で使用するために deviceID を記録します
              if (deviceObj.name == this.data.name) {
                my.alert({ content: 'ターゲットデバイスが見つかりました' });
                my.offBluetoothDeviceFound();
                this.setData({
                  deviceId: deviceObj.deviceId,
                });
                break;
              }
            }
          },
          fail: error => {
            my.alert({ content: '新しいデバイスのリッスンに失敗しました' + JSON.stringify(error) });
          },
        });
      },
      fail: error => {
        my.alert({ content: 'スキャンの開始に失敗しました' + JSON.stringify(error) });
      },
    });
  },
  // スキャンを停止
  stopBluetoothDevicesDiscovery() {
    my.stopBluetoothDevicesDiscovery({
      success: res => {
        my.offBluetoothDeviceFound();
        my.alert({ content: '操作に成功しました!' });
      },
      fail: error => {
        my.alert({ content: JSON.stringify(error) });
      },
    });
  },
  // 接続済みのデバイスを取得
  getConnectedBluetoothDevices() {
    my.getConnectedBluetoothDevices({
      success: res => {
        if (res.devices.length === 0) {
          my.alert({ content: '接続済みのデバイスはありません!' });
          return;
        }
        my.alert({ content: JSON.stringify(res) });
        devid = res.devices[0].deviceId;
      },
      fail: error => {
        my.alert({ content: JSON.stringify(error) });
      },
    });
  },
  // 検出されたすべてのデバイスを取得
  getBluetoothDevices() {
    my.getBluetoothDevices({
      success: res => {
        my.alert({ content: JSON.stringify(res) });
      },
      fail: error => {
        my.alert({ content: JSON.stringify(error) });
      },
    });
  },
  bindKeyInput(e) {
    this.setData({
      devid: e.detail.value,
    });
  },
  // デバイスに接続
  connectBLEDevice() {
    my.connectBLEDevice({
      deviceId: this.data.devid,
      success: res => {
        my.alert({ content: '接続に成功しました' });
      },
      fail: error => {
        my.alert({ content: JSON.stringify(error) });
      },
    });
  },
  // 切断
  disconnectBLEDevice() {
    my.disconnectBLEDevice({
      deviceId: this.data.devid,
      success: () => {
        my.alert({ content: '切断に成功しました!' });
      },
      fail: error => {
        my.alert({ content: JSON.stringify(error) });
      },
    });
  },
  // 接続済みデバイスのサービスを取得します。これは接続中に実行する必要があります。
  getBLEDeviceServices() {
    my.getConnectedBluetoothDevices({
      success: res => {
        if (res.devices.length === 0) {
          my.alert({ content: '接続済みのデバイスはありません' });
          return;
        }
        my.getBLEDeviceServices({
          deviceId: this.data.devid,
          success: res => {
            my.alert({ content: JSON.stringify(res) });
            this.setData({
              serid: res.services[0].serviceId,
            });
          },
          fail: error => {
            my.alert({ content: JSON.stringify(error) });
          },
        });
      },
    });
  },
  // 接続済みデバイスの charid を取得します。これは接続中に実行する必要があります。(これは読み取り/書き込みキャラクタリスティックをフィルターします。)
  getBLEDeviceCharacteristics() {
    my.getConnectedBluetoothDevices({
      success: res => {
        if (res.devices.length === 0) {
          my.alert({ content: '接続済みのデバイスはありません' });
          return;
        }
        this.setData({
          devid: res.devices[0].deviceId,
        });
        my.getBLEDeviceCharacteristics({
          deviceId: this.data.devid,
          serviceId: this.data.serid,
          success: res => {
            my.alert({ content: JSON.stringify(res) });
            // キャラクタリスティックオブジェクトのプロパティについてはドキュメントをご参照ください。後で使用するために、読み取り/書き込みキャラクタリスティックを照合して記録します。
            this.setData({
              charid: res.characteristics[0].characteristicId,
            });
          },
          fail: error => {
            my.alert({ content: JSON.stringify(error) });
          },
        });
      },
    });
  },
  // データの読み取りと書き込み
  readBLECharacteristicValue() {
    my.getConnectedBluetoothDevices({
      success: res => {
        if (res.devices.length === 0) {
          my.alert({ content: '接続済みのデバイスはありません' });
          return;
        }
        this.setData({
          devid: res.devices[0].deviceId,
        });
        my.readBLECharacteristicValue({
          deviceId: this.data.devid,
          serviceId: this.data.serid,
          characteristicId: this.data.notifyId,
          // 1. Android 読み取りサービス
          // serviceId:'0000180d-0000-1000-8000-00805f9b34fb',
          // characteristicId:'00002a38-0000-1000-8000-00805f9b34fb',
          success: res => {
            my.alert({ content: JSON.stringify(res) });
          },
          fail: error => {
            my.alert({ content: '読み取りに失敗しました' + JSON.stringify(error) });
          },
        });
      },
    });
  },
  writeBLECharacteristicValue() {
    my.getConnectedBluetoothDevices({
      success: res => {
        if (res.devices.length === 0) {
          my.alert({ content: '接続済みのデバイスはありません' });
          return;
        }
        this.setData({
          devid: res.devices[0].deviceId,
        });
        my.writeBLECharacteristicValue({
          deviceId: this.data.devid,
          serviceId: this.data.serid,
          characteristicId: this.data.charid,
          // Android 書き込みサービス
          //serviceId:'0000180d-0000-1000-8000-00805f9b34fb',
          //characteristicId:'00002a39-0000-1000-8000-00805f9b34fb',
          value: 'ABCD',
          success: res => {
            my.alert({ content: 'データが正常に書き込まれました!' });
          },
          fail: error => {
            my.alert({ content: JSON.stringify(error) });
          },
        });
      },
    });
  },
  notifyBLECharacteristicValueChange() {
    my.getConnectedBluetoothDevices({
      success: res => {
        if (res.devices.length === 0) {
          my.alert({ content: '接続済みのデバイスはありません' });
          return;
        }
        this.setData({
          devid: res.devices[0].deviceId,
        });
        my.notifyBLECharacteristicValueChange({
          state: true,
          deviceId: this.data.devid,
          serviceId: this.data.serid,
          characteristicId: this.data.notifyId,
          success: () => {
            // キャラクタリスティック値の変更をリッスン
            my.onBLECharacteristicValueChange({
              success: res => {
                //  my.alert({content: 'キャラクタリスティック値が変更されました: '+JSON.stringify(res)});
                my.alert({ content: '受信した応答データ = ' + res.value });
              },
            });
            my.alert({ content: 'リスナーが正常に有効化されました' });
          },
          fail: error => {
            my.alert({ content: 'リスナーの有効化に失敗しました' + JSON.stringify(error) });
          },
        });
      },
    });
  },
  offBLECharacteristicValueChange() {
    my.offBLECharacteristicValueChange();
  },
  // その他のイベント
  bluetoothAdapterStateChange() {
    my.onBluetoothAdapterStateChange(this.getBind('onBluetoothAdapterStateChange'));
  },
  onBluetoothAdapterStateChange() {
    if (res.error) {
      my.alert({ content: JSON.stringify(error) });
    } else {
      my.alert({ content: 'ローカル Bluetooth の状態が変更されました: ' + JSON.stringify(res) });
    }
  },
  offBluetoothAdapterStateChange() {
    my.offBluetoothAdapterStateChange(this.getBind('onBluetoothAdapterStateChange'));
  },
  getBind(name) {
    if (!this[`bind${name}`]) {
      this[`bind${name}`] = this[name].bind(this);
    }
    return this[`bind${name}`];
  },
  BLEConnectionStateChanged() {
    my.onBLEConnectionStateChanged(this.getBind('onBLEConnectionStateChanged'));
  },
  onBLEConnectionStateChanged(res) {
    if (res.error) {
      my.alert({ content: JSON.stringify(error) });
    } else {
      my.alert({ content: '接続状態が変更されました: ' + JSON.stringify(res) });
    }
  },
  offBLEConnectionStateChanged() {
    my.offBLEConnectionStateChanged(this.getBind('onBLEConnectionStateChanged'));
  },
  onUnload() {
    this.offBLEConnectionStateChanged();
    this.offBLECharacteristicValueChange();
    this.offBluetoothAdapterStateChange();
    this.closeBluetoothAdapter();
  },
});

バグとヒント

  • バグ:ユーザーの Bluetooth がオフになっているか、携帯電話が Bluetooth をサポートしていない場合、my.openBluetoothAdapter を呼び出すとエラーが返されます。エラーコードの詳細については、「Bluetooth API エラーコード表」をご参照ください。この時点で、ミニプログラムの Bluetooth モジュールはすでに初期化されており、my.onBluetoothAdapterStateChange を使用して携帯電話の Bluetooth 状態の変更をリッスンできます。

  • ヒント:my.openBluetoothAdapter API を呼び出す前に他の Bluetooth モジュール API を呼び出すと、エラーが返されます。

    • エラーコード:10000

    • エラーの説明:Bluetooth アダプターが初期化されていません

    • ソリューション:my.openBluetoothAdapter を呼び出してください。

my.closeBluetoothAdapter

ローカル Bluetooth モジュールをシャットダウンします。

入力パラメーター

名前

必須

説明

success

関数

いいえ

呼び出しが成功した場合のコールバック関数です。

fail

関数

いいえ

呼び出しが失敗した場合のコールバック関数です。

complete

関数

いいえ

呼び出しの成功、失敗にかかわらず、呼び出しの最後に実行されるコールバック関数です。

コード例

my.closeBluetoothAdapter({
  success: (res) => {
  },
  fail:(res) => {
  },
  complete: (res)=>{
  }
});

バグとヒント

  • ヒント:このメソッドを呼び出すと、確立されているすべての Bluetooth 接続が切断され、システムリソースが解放されます。

  • ヒント:ミニプログラムの Bluetooth プロセスが終了したら、このメソッドを呼び出してください。これは my.openBluetoothAdapter と対で呼び出す必要があります。

  • ヒント:my.closeBluetoothAdapter を呼び出してリソースを解放するのは非同期操作です。例外処理フローで my.closeBluetoothAdaptermy.openBluetoothAdapter を使用しないでください。これは、閉じてから再度開いて再初期化するのと同じで、非効率的であり、スレッド同期の問題を引き起こす可能性があります。

my.getBluetoothAdapterState

ローカル Bluetooth モジュールの状態を取得します。

入力パラメーター

名前

必須

説明

success

関数

いいえ

呼び出しが成功した場合のコールバック関数です。

fail

関数

いいえ

呼び出しが失敗した場合のコールバック関数です。

complete

関数

いいえ

呼び出しの成功、失敗にかかわらず、呼び出しの最後に実行されるコールバック関数です。

成功時の戻り値

名前

説明

discovering

ブール値

デバイス検索が進行中かどうか。

available

ブール値

Bluetooth モジュールが利用可能かどうかを示します。デバイスは BLE をサポートし、Bluetooth が有効になっている必要があります。

コード例

my.getBluetoothAdapterState({
  success: (res) => {
      console.log(res)
  },
  fail:(res) => {
  },
  complete: (res)=>{
  }
});

my.startBluetoothDevicesDiscovery

近くの Bluetooth 周辺機器の検索を開始します。検索結果は my.onBluetoothDeviceFound イベントで返されます。

入力パラメーター

名前

必須

説明

services

配列

いいえ

Bluetooth デバイスのプライマリサービス UUID のリストです。

allowDuplicatesKey

ブール値

いいえ

同じデバイスを複数回レポートするかどうかを指定します。true に設定すると、onBluetoothDeviceFound メソッドは同じデバイスを複数回レポートする可能性がありますが、RSSI 値は異なります。

interval

整数

いいえ

デバイスをレポートする間隔です。デフォルト値は 0 で、新しいデバイスが見つかるとすぐにレポートされることを意味します。それ以外の場合は、指定された間隔でデバイスがレポートされます。

success

関数

いいえ

呼び出しが成功した場合のコールバック関数です。

fail

関数

いいえ

呼び出しが失敗した場合のコールバック関数です。

complete

関数

いいえ

呼び出しの成功、失敗にかかわらず、呼び出しの最後に実行されるコールバック関数です。

コード例

my.startBluetoothDevicesDiscovery({
  services: ['fff0'],
  success: (res) => {
      console.log(res)
  },
  fail:(res) => {
  },
  complete: (res)=>{
  }
});

バグとヒント

  • ヒント:この操作はシステムリソースを大量に消費します。デバイスを検出して接続した後は、stop メソッドを呼び出して検索を停止してください。

my.stopBluetoothDevicesDiscovery

近くの Bluetooth 周辺機器の検索を停止します。

入力パラメーター

名前

必須

説明

success

関数

いいえ

呼び出しが成功した場合のコールバック関数です。

fail

関数

いいえ

呼び出しが失敗した場合のコールバック関数です。

complete

関数

いいえ

呼び出しの成功、失敗にかかわらず、呼び出しの最後に実行されるコールバック関数です。

コード例

my.stopBluetoothDevicesDiscovery({
  success: (res) => {
    console.log(res)
  },
  fail:(res) => {
  },
  complete: (res)=>{
  }
});

my.getBluetoothDevices

ローカルデバイスにすでに接続されているものを含め、検出されたすべての Bluetooth デバイスを取得します。

入力パラメーター

名前

必須

説明

success

関数

いいえ

呼び出しが成功した場合のコールバック関数です。

fail

関数

いいえ

呼び出しが失敗した場合のコールバック関数です。

complete

関数

いいえ

呼び出しの成功、失敗にかかわらず、呼び出しの最後に実行されるコールバック関数です。

成功時の戻り値

名前

説明

devices

配列

検出されたデバイスのリストです。

device オブジェクト

名前

説明

name

文字列

Bluetooth デバイス名です。一部のデバイスには名前がない場合があります。

deviceName (下位互換性のため)

文字列

値は name と同じです。

localName

文字列

ブロードキャストデバイス名です。

deviceId

文字列

デバイス ID です。

RSSI

数値

デバイスの電波強度です。

advertisData

16 進数文字列

デバイスのブロードキャストコンテンツです。

manufacturerData

16 進数文字列

デバイスの製造元データです。

コード例

my.getBluetoothDevices({
  success: (res) => {
      console.log(res)
  },
  fail:(res) => {
  },
  complete: (res)=>{
  }
});

バグとヒント

  • ヒント:エミュレーターでは advertisDataRSSI を取得できない場合があります。デバッグには実機を使用してください。

  • ヒント:開発者ツールと Android から取得した deviceId はデバイスの MAC アドレスです。iOS では、デバイスの UUID です。したがって、deviceId をハードコーディングしないでください。プラットフォームごとに異なる方法で処理する必要があります。iOS では、localNameadvertisDatamanufacturerData などのプロパティに基づいてデバイスを動的に照合できます。

my.getConnectedBluetoothDevices

接続されているすべてのデバイスを取得します。

入力パラメーター

名前

必須

説明

deviceId

文字列

いいえ

Bluetooth デバイス ID です。

success

関数

いいえ

呼び出しが成功した場合のコールバック関数です。

fail

関数

いいえ

呼び出しが失敗した場合のコールバック関数です。

complete

関数

いいえ

呼び出しの成功、失敗にかかわらず、呼び出しの最後に実行されるコールバック関数です。

コード例

my.getConnectedBluetoothDevices({
  success: (res) => {
      console.log(res)
  },
  fail:(res) => {
  },
  complete: (res)=>{
  }
});

バグとヒント

  • ヒント:ミニプログラムが以前に Bluetooth デバイスを検出したことがある場合は、検索から取得した deviceId を直接渡して、再度検索することなくデバイスに接続できます。

  • ヒント:指定された Bluetooth デバイスがすでに接続されている場合、再接続すると直接 success が返されます。

my.connectBLEDevice

Bluetooth Low Energy (BLE) デバイスに接続します。

入力パラメーター

名前

必須

説明

deviceId

文字列

はい

Bluetooth デバイス ID です。

success

関数

いいえ

呼び出しが成功した場合のコールバック関数です。

fail

関数

いいえ

呼び出しが失敗した場合のコールバック関数です。

complete

関数

いいえ

呼び出しの成功、失敗にかかわらず、呼び出しの最後に実行されるコールバック関数です。

コード例

my.connectBLEDevice({
  // ここの deviceId は getBluetoothDevices または onBluetoothDeviceFound API から取得する必要があります。
  deviceId: deviceId,
  success: (res) => {
      console.log(res)
  },
  fail:(res) => {
  },
  complete: (res)=>{
  }
});

バグとヒント

  • ヒント:ミニプログラムが以前に Bluetooth デバイスを検出したことがある場合は、検索から取得した deviceId を直接渡して、再度検索することなくデバイスに接続できます。

  • ヒント:指定された Bluetooth デバイスがすでに接続されている場合、再接続すると直接 success が返されます。

  • ヒント:この機能は iOS クライアントおよび Android 5.0 以降のクライアントでサポートされています。

my.disconnectBLEDevice

BLE デバイスから切断します。

入力パラメーター

名前

必須

説明

deviceId

文字列

はい

Bluetooth デバイス ID です。

success

関数

いいえ

呼び出しが成功した場合のコールバック関数です。

fail

関数

いいえ

呼び出しが失敗した場合のコールバック関数です。

complete

関数

いいえ

呼び出しの成功、失敗にかかわらず、呼び出しの最後に実行されるコールバック関数です。

コード例

my.disconnectBLEDevice({
  deviceId: deviceId,
  success: (res) => {
      console.log(res)
  },
  fail:(res) => {
  },
  complete: (res)=>{
  }
});

バグとヒント

  • ヒント:Bluetooth 接続はいつでも失われる可能性があります。my.onBLEConnectionStateChanged コールバックイベントをリッスンして、必要に応じて再接続してください。

  • ヒント:未接続または切断されたデバイスに対してデータ読み取り/書き込み API を呼び出すと、エラー 10006 が返されます。詳細については、「Bluetooth API エラーコード表」をご参照ください。再接続することを推奨します。

  • ヒント:この機能は iOS クライアントおよび Android 5.0 以降のクライアントでサポートされています。

my.writeBLECharacteristicValue

BLE デバイスのキャラクタリスティックにデータを書き込みます。

入力パラメーター

名前

必須

説明

deviceId

文字列

はい

Bluetooth デバイス ID です。device オブジェクトをご参照ください。

serviceId

文字列

はい

キャラクタリスティックが属する service の UUID です。

characteristicId

文字列

はい

Bluetooth キャラクタリスティックの UUID です。

value

16 進数文字列

はい

キャラクタリスティックの値で、16 進数文字列として表されます。値は 20 バイトに制限されています。

success

関数

いいえ

呼び出しが成功した場合のコールバック関数です。

fail

関数

いいえ

呼び出しが失敗した場合のコールバック関数です。

complete

関数

いいえ

呼び出しの成功、失敗にかかわらず、呼び出しの最後に実行されるコールバック関数です。

コード例

my.writeBLECharacteristicValue({
  deviceId: deviceId,
  serviceId: serviceId,
  characteristicId: characteristicId,
  value: 'fffe',
  success: (res) => {
      console.log(res)
  },
  fail:(res) => {
  },
  complete: (res)=>{
  }
});

バグとヒント

  • ヒント:この呼び出しを成功させるには、デバイスのキャラクタリスティックが書き込み操作をサポートしている必要があります。キャラクタリスティックの properties 属性を確認してください。

  • ヒント:書き込むバイナリデータは 16 進数エンコードされている必要があります。

  • ヒント:この機能は iOS クライアントおよび Android 5.0 以降のクライアントでサポートされています。

my.readBLECharacteristicValue

BLE デバイスのキャラクタリスティックからデータを読み取ります。呼び出し後、データは my.onBLECharacteristicValueChange() イベントで返されます。

入力パラメーター

名前

必須

説明

deviceId

文字列

はい

Bluetooth デバイス ID です。device オブジェクトをご参照ください。

serviceId

文字列

はい

キャラクタリスティックが属する service の UUID です。

characteristicId

文字列

はい

Bluetooth キャラクタリスティックの UUID です。

success

関数

いいえ

呼び出しが成功した場合のコールバック関数です。

fail

関数

いいえ

呼び出しが失敗した場合のコールバック関数です。

complete

関数

いいえ

呼び出しの成功、失敗にかかわらず、呼び出しの最後に実行されるコールバック関数です。

成功時の戻り値

名前

説明

characteristic

オブジェクト

デバイスのキャラクタリスティック情報です。

characteristic オブジェクト

Bluetooth デバイスのキャラクタリスティックに関する情報です。

名前

説明

characteristicId

文字列

Bluetooth デバイスのキャラクタリスティックの UUID です。

serviceId

文字列

キャラクタリスティックが属するサービスの UUID です。

value

16 進数文字列

Bluetooth デバイスのキャラクタリスティックの値です。

コード例

my.readBLECharacteristicValue({
  deviceId: deviceId,
  serviceId: serviceId,
  characteristicId: characteristicId,
  success: (res) => {
      console.log(res)
  },
  fail:(res) => {
  },
  complete: (res)=>{
  }
});

バグとヒント

  • ヒント:この呼び出しを成功させるには、デバイスのキャラクタリスティックが読み取り操作をサポートしている必要があります。キャラクタリスティックの properties 属性を確認してください。

  • ヒント:読み取りと書き込みの API を並行して呼び出すと、失敗する可能性があります。

  • ヒント:読み取り操作がエラーコード 10015 でタイムアウトした場合でも、my.onBLECharacteristicValueChange インターフェイスは後でデータを返す可能性があり、それに応じて処理する必要があります。エラーコードとソリューションの詳細については、「Bluetooth API エラーコードリファレンス」をご参照ください。

  • ヒント:この機能は iOS クライアントおよび Android 5.0 以降のクライアントでサポートされています。

my.notifyBLECharacteristicValueChange

BLE デバイスのキャラクタリスティック値の変更に対する notify 機能を有効にします。

入力パラメーター

名前

必須

説明

deviceId

文字列

はい

Bluetooth デバイス ID です。device オブジェクトをご参照ください。

serviceId

文字列

はい

キャラクタリスティックが属する service の UUID です。

characteristicId

文字列

はい

Bluetooth キャラクタリスティックの UUID です。

descriptorId

文字列

いいえ

notify descriptor の UUID です。これは Android でのみ使用され、必須ではありません。デフォルト値は 00002902-0000-10008000-00805f9b34fb です。

state

ブール値

いいえ

notify または indicate を有効にするかどうかを指定します。

success

関数

いいえ

呼び出しが成功した場合のコールバック関数です。

fail

関数

いいえ

呼び出しが失敗した場合のコールバック関数です。

complete

関数

いいえ

呼び出しの成功、失敗にかかわらず、呼び出しの最後に実行されるコールバック関数です。

コード例

my.notifyBLECharacteristicValueChange({
  deviceId: deviceId,
  serviceId: serviceId,
  characteristicId: characteristicId,
  success: (res) => {
      console.log(res)
  },
  fail:(res) => {
  },
  complete: (res)=>{
  }
});

バグとヒント

  • ヒント:この呼び出しを成功させるには、デバイスのキャラクタリスティックが notify または indicate をサポートしている必要があります。characteristicproperties 属性を確認してください。

  • ヒント:デバイスの characteristicValueChange イベントをリッスンする前に、notify を有効にする必要があります。

  • ヒント:サブスクリプションが成功した後、デバイスは my.onBLECharacteristicValueChange をトリガーするためにキャラクタリスティックの値をアクティブに更新する必要があります。

  • ヒント:サブスクリプションは読み取りよりも効率的です。読み取りメソッドの代わりにサブスクリプションを使用することを推奨します。

my.getBLEDeviceServices

ローカルデバイスにすでに接続されているものを含め、検出されたすべての Bluetooth デバイスを取得できます。

入力パラメーター

名前

必須

説明

deviceId

文字列

はい

Bluetooth デバイス ID です。device オブジェクトをご参照ください。

success

関数

いいえ

呼び出しが成功した場合のコールバック関数です。

fail

関数

いいえ

呼び出しが失敗した場合のコールバック関数です。

complete

関数

いいえ

呼び出しの成功、失敗にかかわらず、呼び出しの最後に実行されるコールバック関数です。

成功時の戻り値

名前

説明

services

配列

検出されたデバイスサービスのリストです。キャラクタリスティック情報については、次の表をご参照ください。

service オブジェクト

Bluetooth デバイスサービスに関する情報です。

名前

説明

serviceId

文字列

Bluetooth デバイスサービスの UUID です。

isPrimary

ブール値

これがプライマリサービスであるかどうかを示します。

  • true の値はプライマリサービスを示します。

  • false: プライマリサービスではありません。

コード例

 // 接続済みデバイスのサービスを取得します。これは接続中に実行する必要があります。
  getBLEDeviceServices() {
    my.getConnectedBluetoothDevices({
      success: res => {
        if (res.devices.length === 0) {
          my.alert({ content: '接続済みのデバイスはありません' });
          return;
        }
        my.getBLEDeviceServices({
          deviceId: this.data.devid,
          success: res => {
            my.alert({ content: JSON.stringify(res) });
            this.setData({
              serid: res.services[0].serviceId,
            });
          },
          fail: error => {
            my.alert({ content: JSON.stringify(error) });
          },
        });
      },
    });
  },

戻り値のサンプル

{
    "services": [{
        "isPrimary": true,
        "serviceId": "00001800-0000-1000-8000-00805f9b34fb"
    }, {
        "isPrimary": true,
        "serviceId": "00001801-0000-1000-8000-00805f9b34fb"
    }, {
        "isPrimary": true,
        "serviceId": "d0611e78-bbb4-4591-a5f8-487910ae4366"
    }, {
        "isPrimary": true,
        "serviceId": "9fa480e0-4967-4542-9390-d343dc5d04ae"
    }]
}

バグとヒント

  • ヒント:接続を確立した後、Bluetooth デバイスと対話する前に my.getBLEDeviceServicesmy.getBLEDeviceCharacteristics を実行してください。

  • ヒント:この機能は iOS クライアントおよび Android 5.0 以降のクライアントでサポートされています。

my.getBLEDeviceCharacteristics

Bluetooth デバイスのすべての characteristics を取得できます。

入力パラメーター

名前

必須

説明

deviceId

文字列

はい

Bluetooth デバイス ID です。device オブジェクトをご参照ください。

serviceId

文字列

はい

キャラクタリスティックが属する service の UUID です。

success

関数

いいえ

呼び出しが成功した場合のコールバック関数です。

fail

関数

いいえ

呼び出しが失敗した場合のコールバック関数です。

complete

関数

いいえ

呼び出しの成功、失敗にかかわらず、呼び出しの最後に実行されるコールバック関数です。

成功時の戻り値

名前

説明

characteristics

配列

デバイスのキャラクタリスティックのリストです。

characteristic オブジェクト

Bluetooth デバイスの characteristic に関する情報です。

名前

説明

characteristicId

文字列

Bluetooth デバイスのキャラクタリスティックの UUID です。

serviceId

文字列

キャラクタリスティックが属するサービスの UUID です。

value

16 進数文字列

Bluetooth デバイスのキャラクタリスティックの 16 進数値です。

properties

オブジェクト

このキャラクタリスティックがサポートする操作です。

properties オブジェクト

名前

説明

read

ブール値

このキャラクタリスティックが読み取り操作をサポートしているかどうかを示します。

write

ブール値

このキャラクタリスティックが書き込み操作をサポートしているかどうかを示します。

notify

ブール値

このキャラクタリスティックが notify 操作をサポートしているかどうかを示します。

indicate

ブール値

このキャラクタリスティックが indicate 操作をサポートしているかどうかを示します。

コード例

my.getBLEDeviceCharacteristics({
  deviceId: deviceId,
  serviceId: serviceId,
  success: (res) => {
      console.log(res)
  },
  fail:(res) => {
  },
  complete: (res)=>{
  }
});

バグとヒント

  • ヒント:接続を確立した後、Bluetooth デバイスと対話する前に my.getBLEDeviceServicesmy.getBLEDeviceCharacteristics を実行してください。

  • ヒント:この機能は iOS クライアントおよび Android 5.0 以降のクライアントでサポートされています。

my.onBluetoothDeviceFound(callback)

このイベントは、新しい Bluetooth デバイスが検出されたときにトリガーされます。

入力パラメーター

名前

必須

説明

callback

関数

はい

イベントのコールバック関数です。

コールバックの戻り値

名前

説明

devices

配列

新しく検出されたデバイスのリストです。

device オブジェクト

名前

説明

name

文字列

Bluetooth デバイス名です。一部のデバイスには名前がない場合があります。

deviceName (下位互換性のため)

文字列

値は name と同じです。

localName

文字列

ブロードキャストデバイス名です。

deviceId

文字列

デバイス ID です。

RSSI

数値

デバイスの電波強度です。

advertisData

16 進数文字列

デバイスのブロードキャストコンテンツです。

コード例

Page({
  onLoad() {
    this.callback = this.callback.bind(this);
    my.onBluetoothDeviceFound(this.callback);
  },
  onUnload() {
    my.offBluetoothDeviceFound(this.callback);
  },
  callback(res) {
    console.log(res);
  },
})

バグとヒント

  • ヒント:エミュレーターでは advertisDataRSSI を取得できない場合があります。デバッグには実機を使用してください。

  • ヒント:開発者ツールから取得した `deviceId` は、Android ではデバイスの MAC アドレスですが、iOS ではデバイスの UUID です。したがって、`deviceId` をハードコーディングしないでください。プラットフォームごとに異なる方法で処理する必要があります。iOS では、localNameadvertisDatamanufacturerData などのプロパティに基づいてデバイスを動的に照合できます。

  • ヒント:my.onBluetoothDeviceFound コールバックが Bluetooth デバイスを検出すると、そのデバイスは my.getBluetoothDevices API によって返される配列に追加されます。

my.offBluetoothDeviceFound

新しい Bluetooth デバイス検出イベントのリスナーを削除します。

コード例

my.offBluetoothDeviceFound();

コールバック値を渡すかどうか

  • コールバック値を渡さない場合、このイベントのすべてのリスナーが削除されます。次のコードは例です:

    my.offBluetoothDeviceFound();
  • コールバック値を渡す場合、対応するリスナーのみが削除されます。次のコードは例です:

    my.offBluetoothDeviceFound(this.callback);

バグとヒント

  • ヒント:同じイベントに対して複数のコールバックが発生するのを防ぐため、on メソッドを呼び出す前に off メソッドを呼び出して既存のリスナーを削除してください。

my.onBLECharacteristicValueChange(callback)

BLE デバイスのキャラクタリスティック値の変更をリッスンします。

入力パラメーター

名前

必須

説明

callback

関数

はい

イベントのコールバック関数です。

コールバックの戻り値

名前

説明

deviceId

文字列

Bluetooth デバイス ID です。device オブジェクトをご参照ください。

connected

ブール値

現在の接続状態です。

コード例

Page({
  onLoad() {
    this.callback = this.callback.bind(this);
    my.onBLECharacteristicValueChange(this.callback);
  },
  onUnload() {
    my.offBLECharacteristicValueChange(this.callback);
  },
  callback(res) {
    console.log(res);
  },
})

バグとヒント

  • ヒント:1 つのイベントに対して複数のコールバックが発生するのを防ぐため、on メソッドを呼び出す前に off メソッドを呼び出して既存のリスナーを削除してください。

my.offBLECharacteristicValueChange

BLE デバイスのキャラクタリスティック値の変更に対するリスナーを削除します。

入力パラメーター

型は callback 関数で、その入力パラメーターは次のプロパティを持つオブジェクトです:

プロパティ

説明

deviceId

文字列

Bluetooth デバイス ID です。device オブジェクトをご参照ください。

serviceId

文字列

キャラクタリスティックが属する service の UUID です。

characteristicId

文字列

Bluetooth キャラクタリスティックの UUID です。

value

16 進数文字列

キャラクタリスティックの最新の 16 進数値です。

コールバック値の受け渡し

  • コールバック値を渡さない場合、このイベントのすべてのリスナーが削除されます。次のコードは例です:

    my.offBLECharacteristicValueChange();
  • コールバック値を渡す場合、対応するリスナーのみが削除されます。次のコードは例です:

    my.offBLECharacteristicValueChange(this.callback);

コード例

Page({
  onLoad() {
    this.callback = this.callback.bind(this);
    my.onBLECharacteristicValueChange(this.callback);
  },
  onUnload() {
    my.offBLECharacteristicValueChange(this.callback);
  },
  callback(res) {
    console.log(res);
  },
})

my.onBLEConnectionStateChanged(callback)

デバイスの紛失や異常な切断など、BLE 接続エラーイベントをリッスンします。

入力パラメーター

名前

必須

説明

callback

関数

はい

イベントのコールバック関数です。

コールバックの戻り値

名前

説明

deviceId

文字列

Bluetooth デバイス ID です。device オブジェクトをご参照ください。

connected

ブール値

現在の接続状態です。

コード例

/* .acss */
.help-info {
  padding:10px;
  color:#000000;
}
.help-title {
  padding:10px;
  color:#FC0D1B;
}
// .json
{
    "defaultTitle": "Bluetooth"
}
<!-- .axml-->
<view class="page">
  <view class="page-description">Bluetooth API</view>
  <view class="page-section">
    <view class="page-section-title">ローカル Bluetooth アダプターの状態</view>
    <view class="page-section-demo">
       <button type="primary" onTap="openBluetoothAdapter">Bluetooth の初期化</button>
       <button type="primary" onTap="closeBluetoothAdapter">ローカル Bluetooth を閉じる</button>
       <button type="primary" onTap="getBluetoothAdapterState">Bluetooth の状態を取得</button>
    </view>

    <view class="page-section-title">Bluetooth デバイスのスキャン</view>
    <view class="page-section-demo">
       <button type="primary" onTap="startBluetoothDevicesDiscovery">検索を開始</button>
       <button type="primary" onTap="getBluetoothDevices">検出されたすべてのデバイス</button>
       <button type="primary" onTap="getConnectedBluetoothDevices">接続済みのすべてのデバイス</button>
       <button type="primary" onTap="stopBluetoothDevicesDiscovery">検索を停止</button>
    </view>

    <view class="page-section-title">デバイスへの接続</view>
    <view class="page-section-demo">
       <input class="input" onInput="bindKeyInput" type="{{text}}" placeholder="接続するデバイスの deviceId を入力してください"></input>
       <button type="primary" onTap="connectBLEDevice">デバイスに接続</button>
       <button type="primary" onTap="getBLEDeviceServices">デバイスサービスを取得</button>
       <button type="primary" onTap="getBLEDeviceCharacteristics">読み取り/書き込みキャラクタリスティックを取得</button>
       <button type="primary" onTap="disconnectBLEDevice">デバイスから切断</button>
    </view>

     <view class="page-section-title">データの読み取りと書き込み</view>
     <view class="page-section-demo">
       <button type="primary" onTap="notifyBLECharacteristicValueChange">キャラクタリスティック値の変更をリッスン</button>
       <button type="primary" onTap="readBLECharacteristicValue">データを読み取り</button>
       <button type="primary" onTap="writeBLECharacteristicValue">データを書き込み</button>
       <button type="primary" onTap="offBLECharacteristicValueChange">キャラクタリスティック値リスナーをキャンセル</button>
    </view>

     <view class="page-section-title">その他のイベント</view>
     <view class="page-section-demo">
       <button type="primary" onTap="bluetoothAdapterStateChange">ローカル Bluetooth 状態の変更</button>
       <button type="primary" onTap="offBluetoothAdapterStateChange">ローカル Bluetooth 状態リスナーをキャンセル</button>
       <button type="primary" onTap="BLEConnectionStateChanged">Bluetooth 接続状態の変更</button>
       <button type="primary" onTap="offBLEConnectionStateChanged">Bluetooth 接続状態リスナーをキャンセル</button>

    </view>

  </view>
</view>
// .js
Page({
  data: {
    devid: '0D9C82AD-1CC0-414D-9526-119E08D28124',
    serid: 'FEE7',
    notifyId: '36F6',
    writeId: '36F5',
    charid: '',
    alldev: [{ deviceId: '' }],
  },

  // ローカル Bluetooth アダプターの状態を取得
  openBluetoothAdapter() {
    my.openBluetoothAdapter({
      success: res => {
        if (!res.isSupportBLE) {
          my.alert({ content: '申し訳ありませんが、ご利用の携帯電話では Bluetooth は利用できません。' });
          return;
        }
        my.alert({ content: '初期化に成功しました!' });
      },
      fail: error => {
        my.alert({ content: JSON.stringify(error) });
      },
    });
  },
  closeBluetoothAdapter() {
    my.closeBluetoothAdapter({
      success: () => {
        my.alert({ content: 'Bluetooth が正常に閉じられました!' });
      },
      fail: error => {
        my.alert({ content: JSON.stringify(error) });
      },
    });
  },
  getBluetoothAdapterState() {
    my.getBluetoothAdapterState({
      success: res => {
        if (!res.available) {
          my.alert({ content: '申し訳ありませんが、ご利用の携帯電話では Bluetooth は利用できません。' });
          return;
        }
        my.alert({ content: JSON.stringify(res) });
      },
      fail: error => {
        my.alert({ content: JSON.stringify(error) });
      },
    });
  },

  // Bluetooth デバイスのスキャン
  startBluetoothDevicesDiscovery() {
    my.startBluetoothDevicesDiscovery({
      allowDuplicatesKey: false,
      success: () => {
        my.onBluetoothDeviceFound({
          success: res => {
            // my.alert({content:'新しいデバイスをリッスンしています'+JSON.stringify(res)});
            var deviceArray = res.devices;
            for (var i = deviceArray.length - 1; i >= 0; i--) {
              var deviceObj = deviceArray[i];
              // デバイス名またはブロードキャストデータでターゲットデバイスを照合し、後で使用するために deviceID を記録します
              if (deviceObj.name == this.data.name) {
                my.alert({ content: 'ターゲットデバイスが見つかりました' });
                my.offBluetoothDeviceFound();
                this.setData({
                  deviceId: deviceObj.deviceId,
                });
                break;
              }
            }
          },
          fail: error => {
            my.alert({ content: '新しいデバイスのリッスンに失敗しました' + JSON.stringify(error) });
          },
        });
      },
      fail: error => {
        my.alert({ content: 'スキャンの開始に失敗しました' + JSON.stringify(error) });
      },
    });
  },

  // スキャンを停止
  stopBluetoothDevicesDiscovery() {
    my.stopBluetoothDevicesDiscovery({
      success: res => {
        my.offBluetoothDeviceFound();
        my.alert({ content: '操作に成功しました!' });
      },
      fail: error => {
        my.alert({ content: JSON.stringify(error) });
      },
    });
  },

  // 接続済みのデバイスを取得
  getConnectedBluetoothDevices() {
    my.getConnectedBluetoothDevices({
      success: res => {
        if (res.devices.length === 0) {
          my.alert({ content: '接続済みのデバイスはありません!' });
          return;
        }
        my.alert({ content: JSON.stringify(res) });
        devid = res.devices[0].deviceId;
      },
      fail: error => {
        my.alert({ content: JSON.stringify(error) });
      },
    });
  },

  // 検出されたすべてのデバイスを取得
  getBluetoothDevices() {
    my.getBluetoothDevices({
      success: res => {
        my.alert({ content: JSON.stringify(res) });
      },
      fail: error => {
        my.alert({ content: JSON.stringify(error) });
      },
    });
  },

  bindKeyInput(e) {
    this.setData({
      devid: e.detail.value,
    });
  },

  // デバイスに接続
  connectBLEDevice() {
    my.connectBLEDevice({
      deviceId: this.data.devid,
      success: res => {
        my.alert({ content: '接続に成功しました' });
      },
      fail: error => {
        my.alert({ content: JSON.stringify(error) });
      },
    });
  },

  // 切断
  disconnectBLEDevice() {
    my.disconnectBLEDevice({
      deviceId: this.data.devid,
      success: () => {
        my.alert({ content: '切断に成功しました!' });
      },
      fail: error => {
        my.alert({ content: JSON.stringify(error) });
      },
    });
  },

  // 接続済みデバイスのサービスを取得します。これは接続中に実行する必要があります。
  getBLEDeviceServices() {
    my.getConnectedBluetoothDevices({
      success: res => {
        if (res.devices.length === 0) {
          my.alert({ content: '接続済みのデバイスはありません' });
          return;
        }
        my.getBLEDeviceServices({
          deviceId: this.data.devid,
          success: res => {
            my.alert({ content: JSON.stringify(res) });
            this.setData({
              serid: res.services[0].serviceId,
            });
          },
          fail: error => {
            my.alert({ content: JSON.stringify(error) });
          },
        });
      },
    });
  },

  // 接続済みデバイスの charid を取得します。これは接続中に実行する必要があります。(これは読み取り/書き込みキャラクタリスティックをフィルターします。)
  getBLEDeviceCharacteristics() {
    my.getConnectedBluetoothDevices({
      success: res => {
        if (res.devices.length === 0) {
          my.alert({ content: '接続済みのデバイスはありません' });
          return;
        }
        this.setData({
          devid: res.devices[0].deviceId,
        });
        my.getBLEDeviceCharacteristics({
          deviceId: this.data.devid,
          serviceId: this.data.serid,
          success: res => {
            my.alert({ content: JSON.stringify(res) });
            // キャラクタリスティックオブジェクトのプロパティについてはドキュメントをご参照ください。後で使用するために、読み取り/書き込みキャラクタリスティックを照合して記録します。
            this.setData({
              charid: res.characteristics[0].characteristicId,
            });
          },
          fail: error => {
            my.alert({ content: JSON.stringify(error) });
          },
        });
      },
    });
  },

  // データの読み取りと書き込み
  readBLECharacteristicValue() {
    my.getConnectedBluetoothDevices({
      success: res => {
        if (res.devices.length === 0) {
          my.alert({ content: '接続済みのデバイスはありません' });
          return;
        }
        this.setData({
          devid: res.devices[0].deviceId,
        });
        my.readBLECharacteristicValue({
          deviceId: this.data.devid,
          serviceId: this.data.serid,
          characteristicId: this.data.notifyId,
          // 1. Android 読み取りサービス
          // serviceId:'0000180d-0000-1000-8000-00805f9b34fb',
          // characteristicId:'00002a38-0000-1000-8000-00805f9b34fb',
          success: res => {
            my.alert({ content: JSON.stringify(res) });
          },
          fail: error => {
            my.alert({ content: '読み取りに失敗しました' + JSON.stringify(error) });
          },
        });
      },
    });
  },

  writeBLECharacteristicValue() {
    my.getConnectedBluetoothDevices({
      success: res => {
        if (res.devices.length === 0) {
          my.alert({ content: '接続済みのデバイスはありません' });
          return;
        }
        this.setData({
          devid: res.devices[0].deviceId,
        });

        my.writeBLECharacteristicValue({
          deviceId: this.data.devid,
          serviceId: this.data.serid,
          characteristicId: this.data.charid,

          // Android 書き込みサービス
          //serviceId:'0000180d-0000-1000-8000-00805f9b34fb',
          //characteristicId:'00002a39-0000-1000-8000-00805f9b34fb',
          value: 'ABCD',
          success: res => {
            my.alert({ content: 'データが正常に書き込まれました!' });
          },
          fail: error => {
            my.alert({ content: JSON.stringify(error) });
          },
        });
      },
    });
  },
  notifyBLECharacteristicValueChange() {
    my.getConnectedBluetoothDevices({
      success: res => {
        if (res.devices.length === 0) {
          my.alert({ content: '接続済みのデバイスはありません' });
          return;
        }
        this.setData({
          devid: res.devices[0].deviceId,
        });

        my.notifyBLECharacteristicValueChange({
          state: true,
          deviceId: this.data.devid,
          serviceId: this.data.serid,
          characteristicId: this.data.notifyId,
          success: () => {

            // キャラクタリスティック値の変更をリッスン
            my.onBLECharacteristicValueChange({
              success: res => {

                //  my.alert({content: 'キャラクタリスティック値が変更されました: '+JSON.stringify(res)});
                my.alert({ content: '受信した応答データ = ' + res.value });
              },
            });
            my.alert({ content: 'リスナーが正常に有効化されました' });
          },
          fail: error => {
            my.alert({ content: 'リスナーの有効化に失敗しました' + JSON.stringify(error) });
          },
        });
      },
    });
  },
  offBLECharacteristicValueChange() {
    my.offBLECharacteristicValueChange();
  },

  // その他のイベント
  bluetoothAdapterStateChange() {
    my.onBluetoothAdapterStateChange(this.getBind('onBluetoothAdapterStateChange'));
  },
  onBluetoothAdapterStateChange() {
    if (res.error) {
      my.alert({ content: JSON.stringify(error) });
    } else {
      my.alert({ content: 'ローカル Bluetooth の状態が変更されました: ' + JSON.stringify(res) });
    }
  },
  offBluetoothAdapterStateChange() {
    my.offBluetoothAdapterStateChange(this.getBind('onBluetoothAdapterStateChange'));
  },
  getBind(name) {
    if (!this[`bind${name}`]) {
      this[`bind${name}`] = this[name].bind(this);
    }
    return this[`bind${name}`];
  },
  BLEConnectionStateChanged() {
    my.onBLEConnectionStateChanged(this.getBind('onBLEConnectionStateChanged'));
  },
  onBLEConnectionStateChanged(res) {
    if (res.error) {
      my.alert({ content: JSON.stringify(error) });
    } else {
      my.alert({ content: '接続状態が変更されました: ' + JSON.stringify(res) });
    }
  },
  offBLEConnectionStateChanged() {
    my.offBLEConnectionStateChanged(this.getBind('onBLEConnectionStateChanged'));
  },
  onUnload() {
    this.offBLEConnectionStateChanged();
    this.offBLECharacteristicValueChange();
    this.offBluetoothAdapterStateChange();
    this.closeBluetoothAdapter();
  },
});

バグとヒント

  • ヒント:1 つのイベントに対して複数のコールバックが発生するのを防ぐため、on メソッドを呼び出す前に off メソッドを呼び出して以前のリスナーを削除してください。

my.offBLEConnectionStateChanged

BLE 接続状態の変更に対するリスナーを削除します。

コード例

my.offBLEConnectionStateChanged();

コールバック値を渡す必要がありますか?

  • コールバック値を渡さない場合、このイベントのすべてのリスナーが削除されます。次のコードは例です:

    my.offBLEConnectionStateChanged();
  • コールバック値を渡す場合、対応するリスナーのみが削除されます。次のコードは例です:

    my.offBLEConnectionStateChanged(this.callback);

バグとヒント

  • ヒント:1 つのイベントに対して複数のコールバックが発生するのを防ぐため、on メソッドを呼び出す前に off メソッドを呼び出して以前のリスナーを削除してください。

my.onBluetoothAdapterStateChange(callback)

ローカル Bluetooth アダプターの状態の変更をリッスンします。

入力パラメーター

名前

必須

説明

callback

関数

はい

イベントのコールバック関数です。

コールバックの戻り値

名前

説明

available

ブール値

Bluetooth モジュールはアクティブですか?

discovering

ブール値

Bluetooth モジュールが検索状態にあるかどうかを示します。

コード例

/* .acss */
.help-info {
  padding:10px;
  color:#000000;
}
.help-title {
  padding:10px;
  color:#FC0D1B;
}
// .json
{
    "defaultTitle": "Bluetooth"
}
<!-- .axml-->
<view class="page">
  <view class="page-description">Bluetooth API</view>
  <view class="page-section">
    <view class="page-section-title">ローカル Bluetooth アダプターの状態</view>
    <view class="page-section-demo">
       <button type="primary" onTap="openBluetoothAdapter">Bluetooth の初期化</button>
       <button type="primary" onTap="closeBluetoothAdapter">ローカル Bluetooth を閉じる</button>
       <button type="primary" onTap="getBluetoothAdapterState">Bluetooth の状態を取得</button>
    </view>

    <view class="page-section-title">Bluetooth デバイスのスキャン</view>
    <view class="page-section-demo">
       <button type="primary" onTap="startBluetoothDevicesDiscovery">検索を開始</button>
       <button type="primary" onTap="getBluetoothDevices">検出されたすべてのデバイス</button>
       <button type="primary" onTap="getConnectedBluetoothDevices">接続済みのすべてのデバイス</button>
       <button type="primary" onTap="stopBluetoothDevicesDiscovery">検索を停止</button>
    </view>

    <view class="page-section-title">デバイスへの接続</view>
    <view class="page-section-demo">
       <input class="input" onInput="bindKeyInput" type="{{text}}" placeholder="接続するデバイスの deviceId を入力してください"></input>
       <button type="primary" onTap="connectBLEDevice">デバイスに接続</button>
       <button type="primary" onTap="getBLEDeviceServices">デバイスサービスを取得</button>
       <button type="primary" onTap="getBLEDeviceCharacteristics">読み取り/書き込みキャラクタリスティックを取得</button>
       <button type="primary" onTap="disconnectBLEDevice">デバイスから切断</button>
    </view>

     <view class="page-section-title">データの読み取りと書き込み</view>
     <view class="page-section-demo">
       <button type="primary" onTap="notifyBLECharacteristicValueChange">キャラクタリスティック値の変更をリッスン</button>
       <button type="primary" onTap="readBLECharacteristicValue">データを読み取り</button>
       <button type="primary" onTap="writeBLECharacteristicValue">データを書き込み</button>
       <button type="primary" onTap="offBLECharacteristicValueChange">キャラクタリスティック値リスナーをキャンセル</button>
    </view>

     <view class="page-section-title">その他のイベント</view>
     <view class="page-section-demo">
       <button type="primary" onTap="bluetoothAdapterStateChange">ローカル Bluetooth 状態の変更</button>
       <button type="primary" onTap="offBluetoothAdapterStateChange">ローカル Bluetooth 状態リスナーをキャンセル</button>
       <button type="primary" onTap="BLEConnectionStateChanged">Bluetooth 接続状態の変更</button>
       <button type="primary" onTap="offBLEConnectionStateChanged">Bluetooth 接続状態リスナーをキャンセル</button>

    </view>

  </view>
</view>
// .js
Page({
  data: {
    devid: '0D9C82AD-1CC0-414D-9526-119E08D28124',
    serid: 'FEE7',
    notifyId: '36F6',
    writeId: '36F5',
    charid: '',
    alldev: [{ deviceId: '' }],
  },

  // ローカル Bluetooth アダプターの状態を取得
  openBluetoothAdapter() {
    my.openBluetoothAdapter({
      success: res => {
        if (!res.isSupportBLE) {
          my.alert({ content: '申し訳ありませんが、ご利用の携帯電話では Bluetooth は利用できません。' });
          return;
        }
        my.alert({ content: '初期化に成功しました!' });
      },
      fail: error => {
        my.alert({ content: JSON.stringify(error) });
      },
    });
  },
  closeBluetoothAdapter() {
    my.closeBluetoothAdapter({
      success: () => {
        my.alert({ content: 'Bluetooth が正常に閉じられました!' });
      },
      fail: error => {
        my.alert({ content: JSON.stringify(error) });
      },
    });
  },
  getBluetoothAdapterState() {
    my.getBluetoothAdapterState({
      success: res => {
        if (!res.available) {
          my.alert({ content: '申し訳ありませんが、ご利用の携帯電話では Bluetooth は利用できません。' });
          return;
        }
        my.alert({ content: JSON.stringify(res) });
      },
      fail: error => {
        my.alert({ content: JSON.stringify(error) });
      },
    });
  },

  // Bluetooth デバイスのスキャン
  startBluetoothDevicesDiscovery() {
    my.startBluetoothDevicesDiscovery({
      allowDuplicatesKey: false,
      success: () => {
        my.onBluetoothDeviceFound({
          success: res => {

            // my.alert({content:'新しいデバイスをリッスンしています'+JSON.stringify(res)});
            var deviceArray = res.devices;
            for (var i = deviceArray.length - 1; i >= 0; i--) {
              var deviceObj = deviceArray[i];

              // デバイス名またはブロードキャストデータでターゲットデバイスを照合し、後で使用するために deviceID を記録します
              if (deviceObj.name == this.data.name) {
                my.alert({ content: 'ターゲットデバイスが見つかりました' });
                my.offBluetoothDeviceFound();
                this.setData({
                  deviceId: deviceObj.deviceId,
                });
                break;
              }
            }
          },
          fail: error => {
            my.alert({ content: '新しいデバイスのリッスンに失敗しました' + JSON.stringify(error) });
          },
        });
      },
      fail: error => {
        my.alert({ content: 'スキャンの開始に失敗しました' + JSON.stringify(error) });
      },
    });
  },

  // スキャンを停止
  stopBluetoothDevicesDiscovery() {
    my.stopBluetoothDevicesDiscovery({
      success: res => {
        my.offBluetoothDeviceFound();
        my.alert({ content: '操作に成功しました!' });
      },
      fail: error => {
        my.alert({ content: JSON.stringify(error) });
      },
    });
  },

  // 接続済みのデバイスを取得
  getConnectedBluetoothDevices() {
    my.getConnectedBluetoothDevices({
      success: res => {
        if (res.devices.length === 0) {
          my.alert({ content: '接続済みのデバイスはありません!' });
          return;
        }
        my.alert({ content: JSON.stringify(res) });
        devid = res.devices[0].deviceId;
      },
      fail: error => {
        my.alert({ content: JSON.stringify(error) });
      },
    });
  },

  // 検出されたすべてのデバイスを取得
  getBluetoothDevices() {
    my.getBluetoothDevices({
      success: res => {
        my.alert({ content: JSON.stringify(res) });
      },
      fail: error => {
        my.alert({ content: JSON.stringify(error) });
      },
    });
  },

  bindKeyInput(e) {
    this.setData({
      devid: e.detail.value,
    });
  },

  // デバイスに接続
  connectBLEDevice() {
    my.connectBLEDevice({
      deviceId: this.data.devid,
      success: res => {
        my.alert({ content: '接続に成功しました' });
      },
      fail: error => {
        my.alert({ content: JSON.stringify(error) });
      },
    });
  },

  // 切断
  disconnectBLEDevice() {
    my.disconnectBLEDevice({
      deviceId: this.data.devid,
      success: () => {
        my.alert({ content: '切断に成功しました!' });
      },
      fail: error => {
        my.alert({ content: JSON.stringify(error) });
      },
    });
  },

  // 接続済みデバイスのサービスを取得します。これは接続中に実行する必要があります。
  getBLEDeviceServices() {
    my.getConnectedBluetoothDevices({
      success: res => {
        if (res.devices.length === 0) {
          my.alert({ content: '接続済みのデバイスはありません' });
          return;
        }
        my.getBLEDeviceServices({
          deviceId: this.data.devid,
          success: res => {
            my.alert({ content: JSON.stringify(res) });
            this.setData({
              serid: res.services[0].serviceId,
            });
          },
          fail: error => {
            my.alert({ content: JSON.stringify(error) });
          },
        });
      },
    });
  },

  // 接続済みデバイスの charid を取得します。これは接続中に実行する必要があります。(これは読み取り/書き込みキャラクタリスティックをフィルターします。)
  getBLEDeviceCharacteristics() {
    my.getConnectedBluetoothDevices({
      success: res => {
        if (res.devices.length === 0) {
          my.alert({ content: '接続済みのデバイスはありません' });
          return;
        }
        this.setData({
          devid: res.devices[0].deviceId,
        });
        my.getBLEDeviceCharacteristics({
          deviceId: this.data.devid,
          serviceId: this.data.serid,
          success: res => {
            my.alert({ content: JSON.stringify(res) });

            // キャラクタリスティックオブジェクトのプロパティについてはドキュメントをご参照ください。後で使用するために、読み取り/書き込みキャラクタリスティックを照合して記録します。
            this.setData({
              charid: res.characteristics[0].characteristicId,
            });
          },
          fail: error => {
            my.alert({ content: JSON.stringify(error) });
          },
        });
      },
    });
  },

  // データの読み取りと書き込み
  readBLECharacteristicValue() {
    my.getConnectedBluetoothDevices({
      success: res => {
        if (res.devices.length === 0) {
          my.alert({ content: '接続済みのデバイスはありません' });
          return;
        }
        this.setData({
          devid: res.devices[0].deviceId,
        });
        my.readBLECharacteristicValue({
          deviceId: this.data.devid,
          serviceId: this.data.serid,
          characteristicId: this.data.notifyId,

          // 1. Android 読み取りサービス
          // serviceId:'0000180d-0000-1000-8000-00805f9b34fb',
          // characteristicId:'00002a38-0000-1000-8000-00805f9b34fb',
          success: res => {
            my.alert({ content: JSON.stringify(res) });
          },
          fail: error => {
            my.alert({ content: '読み取りに失敗しました' + JSON.stringify(error) });
          },
        });
      },
    });
  },

  writeBLECharacteristicValue() {
    my.getConnectedBluetoothDevices({
      success: res => {
        if (res.devices.length === 0) {
          my.alert({ content: '接続済みのデバイスはありません' });
          return;
        }
        this.setData({
          devid: res.devices[0].deviceId,
        });

        my.writeBLECharacteristicValue({
          deviceId: this.data.devid,
          serviceId: this.data.serid,
          characteristicId: this.data.charid,

          // Android 書き込みサービス
          //serviceId:'0000180d-0000-1000-8000-00805f9b34fb',
          //characteristicId:'00002a39-0000-1000-8000-00805f9b34fb',
          value: 'ABCD',
          success: res => {
            my.alert({ content: 'データが正常に書き込まれました!' });
          },
          fail: error => {
            my.alert({ content: JSON.stringify(error) });
          },
        });
      },
    });
  },
  notifyBLECharacteristicValueChange() {
    my.getConnectedBluetoothDevices({
      success: res => {
        if (res.devices.length === 0) {
          my.alert({ content: '接続済みのデバイスはありません' });
          return;
        }
        this.setData({
          devid: res.devices[0].deviceId,
        });

        my.notifyBLECharacteristicValueChange({
          state: true,
          deviceId: this.data.devid,
          serviceId: this.data.serid,
          characteristicId: this.data.notifyId,
          success: () => {

            // キャラクタリスティック値の変更をリッスン
            my.onBLECharacteristicValueChange({
              success: res => {

                //  my.alert({content: 'キャラクタリスティック値が変更されました: '+JSON.stringify(res)});
                my.alert({ content: '受信した応答データ = ' + res.value });
              },
            });
            my.alert({ content: 'リスナーが正常に有効化されました' });
          },
          fail: error => {
            my.alert({ content: 'リスナーの有効化に失敗しました' + JSON.stringify(error) });
          },
        });
      },
    });
  },
  offBLECharacteristicValueChange() {
    my.offBLECharacteristicValueChange();
  },

  // その他のイベント
  bluetoothAdapterStateChange() {
    my.onBluetoothAdapterStateChange(this.getBind('onBluetoothAdapterStateChange'));
  },
  onBluetoothAdapterStateChange() {
    if (res.error) {
      my.alert({ content: JSON.stringify(error) });
    } else {
      my.alert({ content: 'ローカル Bluetooth の状態が変更されました: ' + JSON.stringify(res) });
    }
  },
  offBluetoothAdapterStateChange() {
    my.offBluetoothAdapterStateChange(this.getBind('onBluetoothAdapterStateChange'));
  },
  getBind(name) {
    if (!this[`bind${name}`]) {
      this[`bind${name}`] = this[name].bind(this);
    }
    return this[`bind${name}`];
  },
  BLEConnectionStateChanged() {
    my.onBLEConnectionStateChanged(this.getBind('onBLEConnectionStateChanged'));
  },
  onBLEConnectionStateChanged(res) {
    if (res.error) {
      my.alert({ content: JSON.stringify(error) });
    } else {
      my.alert({ content: '接続状態が変更されました: ' + JSON.stringify(res) });
    }
  },
  offBLEConnectionStateChanged() {
    my.offBLEConnectionStateChanged(this.getBind('onBLEConnectionStateChanged'));
  },
  onUnload() {
    this.offBLEConnectionStateChanged();
    this.offBLECharacteristicValueChange();
    this.offBluetoothAdapterStateChange();
    this.closeBluetoothAdapter();
  },
});

my.offBluetoothAdapterStateChange

ローカル Bluetooth 状態の変更に対するリスナーを削除します。

コード例

my.offBluetoothAdapterStateChange();

コールバック値を渡すかどうか

  • コールバック値を渡さない場合、このイベントのすべてのリスナーが削除されます。次のコードは例です:

    my.offBluetoothAdapterStateChange();
  • コールバック値を渡す場合、対応するリスナーのみが削除されます。次のコードは例です:

    my.offBluetoothAdapterStateChange(this.callback);

バグとヒント

  • ヒント:イベントに対して重複したコールバックが発生するのを防ぐため、on メソッドを呼び出す前に off メソッドを呼び出して既存のリスナーを削除してください。