앱은

2017-02-01 3 views
0

기능 android.bluetooth.BluetoothDevice.setPairingConfirmation가 호출되는 BLE 장치와 페어링 후가 없기 때문에 BLUETOOTH_ADMIN 권한의 setPairingConfirmation에서 최종 12 월 (2016) 이후 충돌 시작이 앱 충돌한다 : 응용 프로그램은 때 잘 작동했다앱은

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() 줄을 끄면 앱이 작동하지만 블루투스 장치가 페어링 모드를 중지하지 않습니다.

나는 나의 매니페스트

<uses-permission android:name="android.permission.BLUETOOTH" /> <uses-permission android:name="android.permission.BLUETOOTH_ADMIN" /> <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" /> 을하고 난 안드로이드 버전 M 이상에서 실행 권한 ACCESS_COARSE_LOCATION 부탁드립니다.

런타임 권한으로 BLUETOOTH_ADMIN 및 BLUETOOTH_PRIVILEGED를 요청했지만 대화 상자를 표시하지 않았습니다.

현재 Android 버전의 버그입니까? 12 월 13 일에 앱이 출시되었을 때 앱이 붕괴되지 않았을 것으로 확신합니다.

Android 6 및 7에서 발생합니다. Android 7.1.1을 사용하여 Nexus 6P에서 테스트했습니다.

+2

'BLUETOOTH_PRIVILEGED' 물을 수 없습니다 앱 등 이는 앱이 펌웨어 서명 키에 의해 서명되거나 시스템 ("권한있는") 앱으로 설치되지 않는 한 '서명 | 권한'권한입니다. 'setPairingConfirmation()'은'BLUETOOTH_PRIVILEGED'가 필요한 것으로 문서화되어 있습니다. 아마도 이것은 의도 한대로 작동하고있을 것입니다. 이전에 어떻게 작동했는지 설명 할 수 없으며 해결 방법이 무엇인지 알 수 없습니다. – CommonsWare

+0

[Android Permission BLUETOOTH Manifest 오류] (http://stackoverflow.com/questions/29786291/android-permission-bluetooth-manifest-error) 중복 가능성이 있음 – petey

+0

좋아, 이제 읽은 제 3 자 응용 프로그램에는 BLUETOOTH_PRIVILEGED 권한을 사용할 수 없습니다. 문서에서. 하지만 setPairingConfirmation() 소스를 보면 BLUETOOTH_ADMIN이 필요합니다. 어쩌면 Google은 보안 업데이트에서 이것을 변경했습니다 ... – Roel

답변

0

매니페스트에 권한을 쓰더라도 블루투스 사용 권한이 해제 될 수 있습니다. 사용자는 일부 권한을 거부 할 권한이 있습니다. 런타임 중에 사용자에게 권한을 부여해야합니다. 이 링크는 설정으로 이동하여 당신이 Android requesting permission from the user

하면 해당 권한이 해제되지 않거나 확인할 수 있습니다 도움이 될 것입니다 -> 설치된 앱 -> 앱이 다음의 권한을 보면 찾을 수

+1

블루투스 권한은 런타임 권한이 아닙니다. 런타임에 요청하면 프롬프트되지 않습니다. – Roel

+0

권한이 설정되어 있는지 확인 했습니까? – niju

+1

외부의 응용 프로그램에서 setPairingConfirmation()을 더 이상 사용할 수 없도록하려면 Google에서 보안 업데이트 항목을 변경했습니다. 승인 된 앱과 Android 시스템에서만 사용할 수 있습니다. BLUETOOTH_ADMIN 대신 2016 년 12 월 말 이전에 BLUETOOTH_PRIVILEGED이 (가) 필요합니다. 나는 함수가 필요 없으며 아마 그 함수의 사용법을 오해 한 것 같다. – Roel