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.openBluetoothAdapterAPI を呼び出す前に他の 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.closeBluetoothAdapterとmy.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 に設定すると、 |
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 (下位互換性のため) | 文字列 | 値は |
localName | 文字列 | ブロードキャストデバイス名です。 |
deviceId | 文字列 | デバイス ID です。 |
RSSI | 数値 | デバイスの電波強度です。 |
advertisData | 16 進数文字列 | デバイスのブロードキャストコンテンツです。 |
manufacturerData | 16 進数文字列 | デバイスの製造元データです。 |
コード例
my.getBluetoothDevices({
success: (res) => {
console.log(res)
},
fail:(res) => {
},
complete: (res)=>{
}
});バグとヒント
ヒント:エミュレーターでは
advertisDataとRSSIを取得できない場合があります。デバッグには実機を使用してください。ヒント:開発者ツールと Android から取得した
deviceIdはデバイスの MAC アドレスです。iOS では、デバイスの UUID です。したがって、deviceIdをハードコーディングしないでください。プラットフォームごとに異なる方法で処理する必要があります。iOS では、localName、advertisData、manufacturerDataなどのプロパティに基づいてデバイスを動的に照合できます。
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 です。 |
serviceId | 文字列 | はい | キャラクタリスティックが属する |
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 です。 |
serviceId | 文字列 | はい | キャラクタリスティックが属する |
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 です。 |
serviceId | 文字列 | はい | キャラクタリスティックが属する |
characteristicId | 文字列 | はい | Bluetooth キャラクタリスティックの UUID です。 |
descriptorId | 文字列 | いいえ |
|
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 をサポートしている必要があります。
characteristicのproperties属性を確認してください。ヒント:デバイスの
characteristicValueChangeイベントをリッスンする前に、notify を有効にする必要があります。ヒント:サブスクリプションが成功した後、デバイスは
my.onBLECharacteristicValueChangeをトリガーするためにキャラクタリスティックの値をアクティブに更新する必要があります。ヒント:サブスクリプションは読み取りよりも効率的です。読み取りメソッドの代わりにサブスクリプションを使用することを推奨します。
my.getBLEDeviceServices
ローカルデバイスにすでに接続されているものを含め、検出されたすべての Bluetooth デバイスを取得できます。
入力パラメーター
名前 | 型 | 必須 | 説明 |
deviceId | 文字列 | はい | Bluetooth デバイス ID です。 |
success | 関数 | いいえ | 呼び出しが成功した場合のコールバック関数です。 |
fail | 関数 | いいえ | 呼び出しが失敗した場合のコールバック関数です。 |
complete | 関数 | いいえ | 呼び出しの成功、失敗にかかわらず、呼び出しの最後に実行されるコールバック関数です。 |
成功時の戻り値
名前 | 型 | 説明 |
services | 配列 | 検出されたデバイスサービスのリストです。キャラクタリスティック情報については、次の表をご参照ください。 |
service オブジェクト
Bluetooth デバイスサービスに関する情報です。
名前 | 型 | 説明 |
serviceId | 文字列 | Bluetooth デバイスサービスの UUID です。 |
isPrimary | ブール値 | これがプライマリサービスであるかどうかを示します。
|
コード例
// 接続済みデバイスのサービスを取得します。これは接続中に実行する必要があります。
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.getBLEDeviceServicesとmy.getBLEDeviceCharacteristicsを実行してください。ヒント:この機能は iOS クライアントおよび Android 5.0 以降のクライアントでサポートされています。
my.getBLEDeviceCharacteristics
Bluetooth デバイスのすべての characteristics を取得できます。
入力パラメーター
名前 | 型 | 必須 | 説明 |
deviceId | 文字列 | はい | Bluetooth デバイス ID です。 |
serviceId | 文字列 | はい | キャラクタリスティックが属する |
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.getBLEDeviceServicesとmy.getBLEDeviceCharacteristicsを実行してください。ヒント:この機能は iOS クライアントおよび Android 5.0 以降のクライアントでサポートされています。
my.onBluetoothDeviceFound(callback)
このイベントは、新しい Bluetooth デバイスが検出されたときにトリガーされます。
入力パラメーター
名前 | 型 | 必須 | 説明 |
callback | 関数 | はい | イベントのコールバック関数です。 |
コールバックの戻り値
名前 | 型 | 説明 |
devices | 配列 | 新しく検出されたデバイスのリストです。 |
device オブジェクト
名前 | 型 | 説明 |
name | 文字列 | Bluetooth デバイス名です。一部のデバイスには名前がない場合があります。 |
deviceName (下位互換性のため) | 文字列 | 値は |
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);
},
})バグとヒント
ヒント:エミュレーターでは
advertisDataとRSSIを取得できない場合があります。デバッグには実機を使用してください。ヒント:開発者ツールから取得した `deviceId` は、Android ではデバイスの MAC アドレスですが、iOS ではデバイスの UUID です。したがって、`deviceId` をハードコーディングしないでください。プラットフォームごとに異なる方法で処理する必要があります。iOS では、
localName、advertisData、manufacturerDataなどのプロパティに基づいてデバイスを動的に照合できます。ヒント:
my.onBluetoothDeviceFoundコールバックが Bluetooth デバイスを検出すると、そのデバイスはmy.getBluetoothDevicesAPI によって返される配列に追加されます。
my.offBluetoothDeviceFound
新しい Bluetooth デバイス検出イベントのリスナーを削除します。
コード例
my.offBluetoothDeviceFound();コールバック値を渡すかどうか
コールバック値を渡さない場合、このイベントのすべてのリスナーが削除されます。次のコードは例です:
my.offBluetoothDeviceFound();コールバック値を渡す場合、対応するリスナーのみが削除されます。次のコードは例です:
my.offBluetoothDeviceFound(this.callback);
バグとヒント
ヒント:同じイベントに対して複数のコールバックが発生するのを防ぐため、
onメソッドを呼び出す前にoffメソッドを呼び出して既存のリスナーを削除してください。
my.onBLECharacteristicValueChange(callback)
BLE デバイスのキャラクタリスティック値の変更をリッスンします。
入力パラメーター
名前 | 型 | 必須 | 説明 |
callback | 関数 | はい | イベントのコールバック関数です。 |
コールバックの戻り値
名前 | 型 | 説明 |
deviceId | 文字列 | Bluetooth デバイス ID です。 |
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 です。 |
serviceId | 文字列 | キャラクタリスティックが属する |
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 です。 |
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メソッドを呼び出して既存のリスナーを削除してください。