Android携帯を使用してiBeaconをAdvertiseします。
iBeacon Advertiseアプリの作成
iBeacon Advertiseアプリ「BeaconAdvertise」を作成します。
BeaconAdvertise
package com.example.beaconadvertise;
import androidx.appcompat.app.AppCompatActivity;
import android.annotation.SuppressLint;
import android.bluetooth.le.BluetoothLeAdvertiser;
import android.os.Bundle;
import android.bluetooth.BluetoothAdapter;
import android.bluetooth.BluetoothManager;
import android.bluetooth.le.AdvertiseCallback;
import android.bluetooth.le.AdvertiseData;
import android.bluetooth.le.AdvertiseSettings;
import android.bluetooth.le.BluetoothLeAdvertiser;
import android.content.Context;
import android.os.ParcelUuid;
import java.nio.ByteBuffer;
import java.nio.ByteOrder;
import java.util.UUID;
import android.util.Log;
public class MainActivity extends AppCompatActivity {
//private BluetoothLeAdvertiser mBluetoothLeAdvertiser; // tomo
private final String TAG = "BeaconAdvertise";
@SuppressLint("MissingPermission")
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
BluetoothManager manager = (BluetoothManager) getSystemService(Context.BLUETOOTH_SERVICE);
BluetoothAdapter adapter = manager.getAdapter();
BluetoothLeAdvertiser advertiser = adapter.getBluetoothLeAdvertiser();
// 設定
AdvertiseSettings.Builder settingBuilder = new AdvertiseSettings.Builder();
settingBuilder.setAdvertiseMode(AdvertiseSettings.ADVERTISE_MODE_LOW_POWER);
settingBuilder.setConnectable(false);
settingBuilder.setTimeout(0);
settingBuilder.setTxPowerLevel(AdvertiseSettings.ADVERTISE_TX_POWER_LOW);
AdvertiseSettings settings = settingBuilder.build();
// 以下はAdvertiseData
// 1-5バイト目のフラグはAdvertiseSettingsのsetConnectable(true)で行われています
// 6-7バイト目の会社コードはaddManufactureDataで後ほど構築します
// なので残りの23バイトをByteBufferを用いて構築します
final byte[] manufacturerData = new byte[23];
ByteBuffer byteBuffer = ByteBuffer.wrap(manufacturerData);
byteBuffer.order(ByteOrder.BIG_ENDIAN);
// iBeacon固定値(8バイト目)
byteBuffer.put((byte) 0x02);
// iBeaconのデータバイト数(9バイト目)
byteBuffer.put((byte) 0x15);
// UUID(10―25バイト目)
final UUID uuid = UUID.fromString("4853442-4C45-4144-80C0-1800FFFFFFFF");
// 上位64ビットを追加
byteBuffer.putLong(uuid.getMostSignificantBits());
// 下位64ビットを追加
byteBuffer.putLong(uuid.getLeastSignificantBits());
// major(26-27バイト目)
byteBuffer.putShort((short) 0x0A);
// minor(28-29バイト目)
byteBuffer.putShort((short) 0x1F);
// 電波強度を表す2の補数(30バイト目)
byteBuffer.put((byte) 0x99);
// 会社コード(6-7バイト目)
final int appleManufactureId = 0x004C;
// AdvertiseData作成
final AdvertiseData.Builder dataBuilder = new AdvertiseData.Builder();
dataBuilder.addManufacturerData(appleManufactureId, manufacturerData);
AdvertiseData advertiseData = dataBuilder.build();
//アドバタイズを開始
advertiser.startAdvertising(settings, advertiseData, new AdvertiseCallback() {
@Override
public void onStartSuccess(AdvertiseSettings settingsInEffect) {
super.onStartSuccess(settingsInEffect);
Log.d(TAG, "onStartSuccess");
}
@Override
public void onStartFailure(int errorCode) {
super.onStartFailure(errorCode);
Log.d(TAG, "onStartFailure");
}
});
}
}
iBeacon Advertiseアプリの実行
「パソコンによるBeacon Scan」で作成したアプリを作成して、作成したiBeacon Advertiseアプリ「BeaconAdvertise」を確認します。
