機能android.bluetooth.BluetoothDevice.setPairingConfirmation
が呼び出されたBLEデバイスとペアリングした後が見つからないためBLUETOOTH_ADMIN許可のsetPairingConfirmationの端2016年12月以来、クラッシュを開始し、これはアプリのクラッシュを作る:アプリは時に正常に動作してアプリは
Fatal Exception: java.lang.SecurityException: Need BLUETOOTH PRIVILEGED permission: Neither user 10168 nor current process has android.permission.BLUETOOTH_PRIVILEGED. at android.os.Parcel.readException(Parcel.java:1684) at android.os.Parcel.readException(Parcel.java:1637) at android.bluetooth.IBluetooth$Stub$Proxy.setPairingConfirmation(IBluetooth.java:1566) at android.bluetooth.BluetoothDevice.setPairingConfirmation(BluetoothDevice.java:1182) at nl.myapp.ui.main.NotificationFragment.onDeviceSelected(SourceFile:374) at nl.myapp.ui.main.FindGlassDialogFragment.onDeviceClicked(SourceFile:224) at nl.myapp.ui.main.adapters.DeviceAdapter$2.onClick(SourceFile:61) at android.view.View.performClick(View.java:5637) at android.view.View$PerformClick.run(View.java:22429) at android.os.Handler.handleCallback(Handler.java:751) at android.os.Handler.dispatchMessage(Handler.java:95) at android.os.Looper.loop(Looper.java:154) at android.app.ActivityThread.main(ActivityThread.java:6119) at java.lang.reflect.Method.invoke(Method.java) at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:886) at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:776)
それが開発されました。 device.setPairingConfirmation()
の回線をオフにすると、アプリは動作していますが、Bluetoothデバイスはペア設定モードを停止しません。
私は私のマニフェストに
<uses-permission android:name="android.permission.BLUETOOTH" /> <uses-permission android:name="android.permission.BLUETOOTH_ADMIN" /> <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
を持っていると私はAndroidのバージョンM以降でランタイム許可ACCESS_COARSE_LOCATIONを求めます。
実行時アクセス許可としてBLUETOOTH_ADMINとBLUETOOTH_PRIVILEGEDを要求しようとしましたが、ダイアログを表示しませんでした。
これは現在のAndroidバージョンのバグですか?私はアプリが12月13日にリリースされたときにクラッシュしていないと確信しています。
Android 6および7で発生します。 Android 7.1.1を搭載したNexus 6Pでテストしました。
を探しアプリのように、 'BLUETOOTH_PRIVILEGED'を保持することはできません。このリンクは、あなたがその権限が設定に行くことによってオフになっているかいないされていることを確認することができAndroid requesting permission from the user
のに役立ちますあなたのアプリケーションがファームウェアの署名鍵で署名されているか、システム(「特権」)アプリケーションとしてインストールされている場合を除き、「署名|特権」の許可です。 'setPairingConfirmation()'は 'BLUETOOTH_PRIVILEGED'を必要とすると文書化されているので、これは意図したとおりに動作していると思われます。私はそれが以前にどのように働いていたのか説明することはできません。回避策があれば、それが何であるか分かりません。 – CommonsWare
[Android Permission BLUETOOTHマニフェストエラー]の複製があります(http://stackoverflow.com/questions/29786291/android-permission-bluetooth-manifest-error) – petey
これで、私が読んだサードパーティのアプリケーションではBLUETOOTH_PRIVILEGED権限が利用できませんドキュメンテーションで。 しかし、setPairingConfirmation()のソースを見ると、BLUETOOTH_ADMINが必要です。たぶん、Googleはセキュリティアップデートでこれを変更しました... – Roel