質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.37%
Bluetooth

Bluetoothとは短距離の間でデータを交換するための無線通信規格である。固定・モバイル両方のデバイスから、短波の電波送信を行うことで、高いセキュリティをもつパーソナルエリアネットワーク(PAN)を構築する。

Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

Android

Androidは、Google社が開発したスマートフォンやタブレットなど携帯端末向けのプラットフォームです。 カーネル・ミドルウェア・ユーザーインターフェイス・ウェブブラウザ・電話帳などのアプリケーションやソフトウェアをひとつにまとめて構成。 カーネル・ライブラリ・ランタイムはほとんどがC言語/C++、アプリケーションなどはJavaSEのサブセットとAndroid環境で書かれています。

Android Studio

Android Studioは、 Google社によって開発された、 Androidのネイティブアプリケーション開発に特化した統合開発ツールです。

Kotlin

Kotlinは、ジェットブレインズ社のアンドリー・ブレスラフ、ドミトリー・ジェメロフが開発した、 静的型付けのオブジェクト指向プログラミング言語です。

Q&A

解決済

1回答

1373閲覧

Android端末からBLEビーコンの発信をしたい。

h_al

総合スコア3

Bluetooth

Bluetoothとは短距離の間でデータを交換するための無線通信規格である。固定・モバイル両方のデバイスから、短波の電波送信を行うことで、高いセキュリティをもつパーソナルエリアネットワーク(PAN)を構築する。

Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

Android

Androidは、Google社が開発したスマートフォンやタブレットなど携帯端末向けのプラットフォームです。 カーネル・ミドルウェア・ユーザーインターフェイス・ウェブブラウザ・電話帳などのアプリケーションやソフトウェアをひとつにまとめて構成。 カーネル・ライブラリ・ランタイムはほとんどがC言語/C++、アプリケーションなどはJavaSEのサブセットとAndroid環境で書かれています。

Android Studio

Android Studioは、 Google社によって開発された、 Androidのネイティブアプリケーション開発に特化した統合開発ツールです。

Kotlin

Kotlinは、ジェットブレインズ社のアンドリー・ブレスラフ、ドミトリー・ジェメロフが開発した、 静的型付けのオブジェクト指向プログラミング言語です。

0グッド

1クリップ

投稿2023/11/14 12:07

編集2023/11/14 12:08

実現したいこと

  • 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

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

android のパーミッションの中には、 AndroidManifest に書くだけではダメなものがあります。

Android 12 の新しい Bluetooth 権限

BLUETOOTH_SCAN、BLUETOOTH_ADVERTISE、BLUETOOTH_CONNECT の各権限は実行時の権限です。そのため、Bluetooth デバイスを探す、デバイスを他のデバイスから検出可能にする、またはすでにペア設定されている Bluetooth デバイスと通信する前に、アプリで明示的にユーザーの承認をリクエストする必要があります。

投稿2023/11/14 18:37

編集2023/11/14 18:39
jimbe

総合スコア13168

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

h_al

2023/11/16 12:46

ユーザに権限のリクエストをすることで、log に `BeaconTransmitter com.example.beacon I Advertisement start succeeded.` と表示され、エラーがなくなることが確認できました。 ありがとうございます!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.37%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問