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」を確認します。