2017-02-01 11 views
0

機能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でテストしました。

+2

を探しアプリのように、 'BLUETOOTH_PRIVILEGED'を保持することはできません。このリンクは、あなたがその権限が設定に行くことによってオフになっているかいないされていることを確認することができAndroid requesting permission from the user

のに役立ちますあなたのアプリケーションがファームウェアの署名鍵で署名されているか、システム(「特権」)アプリケーションとしてインストールされている場合を除き、「署名|特権」の許可です。 'setPairingConfirmation()'は 'BLUETOOTH_PRIVILEGED'を必要とすると文書化されているので、これは意図したとおりに動作していると思われます。私はそれが以前にどのように働いていたのか説明することはできません。回避策があれば、それが何であるか分かりません。 – CommonsWare

+0

[Android Permission BLUETOOTHマニフェストエラー]の複製があります(http://stackoverflow.com/questions/29786291/android-permission-bluetooth-manifest-error) – petey

+0

これで、私が読んだサードパーティのアプリケーションではBLUETOOTH_PRIVILEGED権限が利用できませんドキュメンテーションで。 しかし、setPairingConfirmation()のソースを見ると、BLUETOOTH_ADMINが必要です。たぶん、Googleはセキュリティアップデートでこれを変更しました... – Roel

答えて

0

マニフェストに権限を書き込んだとしても、Bluetoothのアクセス許可がオフになることがあります。ユーザーには、許可の一部を拒否する権利があります。実行時にユーザーに権限を与えるように頼む必要があります。 >インストールされたアプリ - - >あなたのアプリを見つけ、その許可

+1

ブルートゥースアクセス許可は実行時アクセス許可ではありません。私が実行時にそれらを要求するとき、彼らは促されません。 – Roel

+0

アクセス許可がオフになっているか、設定内でオンになっていることを確認しましたか? – niju

+1

外部のアプリケーションではsetPairingConfirmation()を使用できないように、賢くGoogleがセキュリティアップデートで何かを変更しました。承認済みのアプリとAndroidシステムでのみ使用できます。 BLUETOOTH_ADMINの代わりにBLUETOOTH_PRIVILEGEDが必要になります(2016年12月まで)。 私は機能が必要ないと思うし、おそらく私はその機能の使用を誤解していました。 – Roel