実現したいこと
- Android端末から、AltBeaconを用いてビーコンの発信を行いたい。
前提
こちらの記事を参考に、ビーコンを発信するだけのアプリケーションを作成しています。
Logcat を見ると、パーミッション周りでエラーが発生しており、指示されたパーミッションを manifest へ記入しているにもかかわらず発生し続けているため困っています。
また、BLEを使用するアプリケーションの作成も初学者であるため、どこかコードに問題点がありましたら、ご教授ください。
発生している問題・エラーメッセージ
Logcat のログになります。(エラー抜粋)
2023-11-14 20:51:37.942 20722-20750 .example.beaco com.example.beacon E Loaded layer handle (8979448385040225997) for layer /my_product/lib64/libcolorx-loader.so 2023-11-14 20:51:37.942 20722-20750 .example.beaco com.example.beacon E Looking for entrypoint ColorX_Check 2023-11-14 20:51:37.942 20722-20750 .example.beaco com.example.beacon E Found ColorX_Check for /my_product/lib64/libcolorx-loader.so 2023-11-14 20:51:37.943 20722-20750 .example.beaco com.example.beacon E Check failed 2023-11-14 20:51:38.037 20722-20722 OplusCusto...ionManager com.example.beacon E sInstance is null, start a new sInstance 2023-11-14 20:51:38.066 20722-20722 BeaconTransmitter com.example.beacon E Cannot start advertising due to exception java.lang.SecurityException: Need android.permission.BLUETOOTH_ADVERTISE permission for android.content.AttributionSource@e5c58b63: GattService startAdvertisingSet at android.os.Parcel.createExceptionOrNull(Parcel.java:2442) at android.os.Parcel.createException(Parcel.java:2426) at android.os.Parcel.readException(Parcel.java:2409) at android.os.Parcel.readException(Parcel.java:2351) at android.bluetooth.IBluetoothGatt$Stub$Proxy.startAdvertisingSet(IBluetoothGatt.java:2041) at android.bluetooth.le.BluetoothLeAdvertiser.startAdvertisingSet(BluetoothLeAdvertiser.java:460) at android.bluetooth.le.BluetoothLeAdvertiser.startAdvertisingSet(BluetoothLeAdvertiser.java:329) at android.bluetooth.le.BluetoothLeAdvertiser.startAdvertising(BluetoothLeAdvertiser.java:167) at android.bluetooth.le.BluetoothLeAdvertiser.startAdvertising(BluetoothLeAdvertiser.java:101) at org.altbeacon.beacon.BeaconTransmitter.startAdvertising(BeaconTransmitter.java:213) at org.altbeacon.beacon.BeaconTransmitter.startAdvertising(BeaconTransmitter.java:159) at org.altbeacon.beacon.BeaconTransmitter.startAdvertising(BeaconTransmitter.java:149) at com.example.beacon.MainActivity.onCreate(MainActivity.kt:34) at android.app.Activity.performCreate(Activity.java:8145) at android.app.Activity.performCreate(Activity.java:8125) at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1344) at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:3750) at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:3943) at android.app.servertransaction.LaunchActivityItem.execute(LaunchActivityItem.java:103) at android.app.servertransaction.TransactionExecutor.executeCallbacks(TransactionExecutor.java:135) at android.app.servertransaction.TransactionExecutor.execute(TransactionExecutor.java:95) at android.app.ActivityThread$H.handleMessage(ActivityThread.java:2348) at android.os.Handler.dispatchMessage(Handler.java:106) at android.os.Looper.loopOnce(Looper.java:233) at android.os.Looper.loop(Looper.java:344) at android.app.ActivityThread.main(ActivityThread.java:8191) at java.lang.reflect.Method.invoke(Native Method) at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:584) at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1034) 2023-11-14 20:51:38.137 20722-20748 ExtensionsLoader com.example.beacon E dlopen failed: library "libhwuiextimpl.so" not found 2023-11-14 20:51:38.178 3492-4058 AuthDialogHelper pid-3492 E CheckNotificationCanBeSetSecond: check com.example.beacon , Notification master switch on, unable to pop dialog 2023-11-14 20:51:38.202 20722-20722 BeaconTransmitter com.example.beacon E Advertisement start failed, code: 3 2023-11-14 20:51:38.202 20722-20722 failed com.example.beacon D EXIT.
該当のソースコード
MainActivity.kt
1package com.example.beacon 2 3import android.bluetooth.le.AdvertiseCallback 4import android.bluetooth.le.AdvertiseSettings 5import android.os.Bundle 6import android.util.Log 7import androidx.appcompat.app.AppCompatActivity 8import org.altbeacon.beacon.Beacon 9import org.altbeacon.beacon.BeaconParser 10import org.altbeacon.beacon.BeaconTransmitter 11 12class MainActivity : AppCompatActivity() { 13 private val UUID = "uuid" 14 val IBEACON_FORMAT = "m:2-3=0215,i:4-19,i:20-21,i:22-23,p:24-24" 15 16 // BLEの発信を制御するクラスのインスタンス 17 private var _beaconTransmitter: BeaconTransmitter? = null 18 19 override fun onCreate(savedInstanceState: Bundle?) { 20 super.onCreate(savedInstanceState) 21 setContentView(R.layout.activity_main) 22 23 val beacon = Beacon.Builder() 24 .setId1(UUID) 25 .setId2("1") 26 .setId3("80") 27 .setManufacturer(0x004C) 28 .build() 29 // Change the layout below for other beacon types 30 val beaconParser = BeaconParser() 31 .setBeaconLayout(IBEACON_FORMAT) 32 val beaconTransmitter = BeaconTransmitter(applicationContext, beaconParser) 33 34 beaconTransmitter.startAdvertising(beacon) 35 36 37 beaconTransmitter.startAdvertising(beacon, object : AdvertiseCallback() { 38 override fun onStartSuccess(settingsInEffect: AdvertiseSettings) { 39 super.onStartSuccess(settingsInEffect) 40 //成功 41 Log.d("succees", "ENTER.") 42 } 43 44 override fun onStartFailure(errorCode: Int) { 45 //失敗 46 Log.d("failed", "EXIT. ") 47 } 48 }) 49 } 50}
AndroidManifest.xml
1<?xml version="1.0" encoding="utf-8"?> 2<manifest xmlns:android="http://schemas.android.com/apk/res/android" 3 xmlns:tools="http://schemas.android.com/tools"> 4 5 <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" /> 6 <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" /> 7 <uses-permission android:name="android.permission.ACCESS_BACKGROUND_LOCATION" /> 8 <uses-permission android:name="android.permission.BLUETOOTH_CONNECT" /> 9 <uses-permission android:name="android.permission.BLUETOOTH_SCAN" /> 10 <uses-permission android:name="android.permission.BLUETOOTH" /> 11 <uses-permission android:name="android.permission.BLUETOOTH_ADMIN" /> 12 <uses-permission android:name="android.permission.BLUETOOTH_ADVERTISE"/> 13 14 <uses-feature 15 android:name="android.hardware.bluetooth_le" 16 android:required="true" /> 17 18 19 <application> 20 --中略-- 21 </application> 22 23</manifest>
試したこと
BLUETOOTH_ADVERTISE のパーミッションを追加
端末内での権限設定を許可
補足情報(FW/ツールのバージョンなど)
IDE: Android Studio Giraffe | 2022.3.1 Patch 1
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2023/11/16 12:46