Android蓝牙运行时用户权限请求对话框在创建后立即消失,如何解决?

4ktjp1zp  于 2023-06-20  发布在  Android
关注(0)|答案(1)|浏览(231)

我正在尝试使用ActivityResultLauncher#launch()函数在Android程序中请求运行时用户权限。它应该创建一个权限对话框,请求用户授予所请求的权限。但在我的程序中,对话不到半秒就消失了。你能指出我错在哪里吗?
我使用以下代码片段在主Activity中请求权限:

  1. if (ActivityCompat.checkSelfPermission(this, Manifest.permission.BLUETOOTH_SCAN) != PackageManager.PERMISSION_GRANTED) {
  2. Log.i(TAG, "Bluetooth scan permission denied. Requesting...");
  3. requestPermissionLauncher.launch(Manifest.permission.BLUETOOTH_SCAN);
  4. Log.i(TAG, "Permission requested. Awaiting user response");
  5. return;
  6. }

requestPermissionLauncher在练习中定义为fallows:

  1. private ActivityResultLauncher<String> requestPermissionLauncher =
  2. registerForActivityResult(new ActivityResultContracts.RequestPermission(), isGranted -> {
  3. if (isGranted) {
  4. Log.i(TAG, "Requested permission granted!");
  5. scanLeDevice();
  6. } else {
  7. Log.e(TAG, "Requested permission denied!");
  8. Toast.makeText(this, "Permission denied! Sorry, we can't continue.", Toast.LENGTH_LONG);
  9. }
  10. });

某些选定的Logcat消息将作为fallows:

  1. ---------------------------- PROCESS STARTED (4871) for package com.example.ble_imu_data_viewer ----------------------------
  2. ...
  3. 2023-06-11 19:57:01.623 4871-4871 important_info com.example.ble_imu_data_viewer I Bluetooth scan permission denied. Requesting...
  4. 2023-06-11 19:57:01.648 4871-4871 important_info com.example.ble_imu_data_viewer I Permission requested. Awaiting user response
  5. 2023-06-11 19:57:01.709 4871-4871 ActivityThread com.example.ble_imu_data_viewer D add activity client record, r= ActivityRecord{af555b6 token=android.os.BinderProxy@5980385 {com.example.ble_imu_data_viewer/com.example.ble_imu_data_viewer.MainActivity}} token= android.os.BinderProxy@5980385
  6. 2023-06-11 19:57:01.720 4871-4871 ZrHung.AppEyeUiProbe com.example.ble_imu_data_viewer D notify runnable to start.
  7. 2023-06-11 19:57:01.737 4871-4871 OpenGLRenderer com.example.ble_imu_data_viewer D Skia GL Pipeline
  8. 2023-06-11 19:57:01.750 4871-4871 HwAppInnerBoostImpl com.example.ble_imu_data_viewer D set config for com.example.ble_imu_data_viewer BOOST_FLAG=false REPORT_DURATION_CLICK=1000 REPORT_TIMES_CLICK=3 REPORT_DURATION_SLIDE=5000 REPORT_TIMES_SLIDE=16
  9. 2023-06-11 19:57:01.753 4871-4871 OpenGLRenderer com.example.ble_imu_data_viewer D HWUI Binary is enabled
  10. 2023-06-11 19:57:01.753 4871-4871 OpenGLRenderer com.example.ble_imu_data_viewer D disableOutlineDraw is true
  11. 2023-06-11 19:57:01.792 1263-1506 HiDATA_HiNetwork system_server E monitor handleActivityChange curPkgName is com.example.ble_imu_data_viewer curUid is 10174 lastPkgName is :com.huawei.android.launcher
  12. 2023-06-11 19:57:01.796 4871-4871 ZrHung.AppEyeUiProbe com.example.ble_imu_data_viewer D stop checker.
  13. 2023-06-11 19:57:01.802 1263-1506 HiDATA_HiNetwork system_server E onAppStart packageName is com.example.ble_imu_data_viewer
  14. 2023-06-11 19:57:01.803 1263-1506 HiDATA_HiNetwork system_server E contain db file packageName: com.example.ble_imu_data_viewer iscanacce:-1
  15. 2023-06-11 19:57:01.806 1730-10535 DollieAdapterService com.huawei.systemserver E notifyActivityState pkg:com.example.ble_imu_data_viewer/com.example.ble_imu_data_viewer.MainActivity state:2 fg:true mUid:10174
  16. ...
  17. 2023-06-11 19:57:11.906 4871-4871 important_info com.example.ble_imu_data_viewer E Requested permission denied!
  18. 2023-06-11 19:57:11.919 4871-4871 ZrHung.AppEyeUiProbe com.example.ble_imu_data_viewer D notify runnable to start.
  19. 2023-06-11 19:57:11.936 4871-4871 InputMethodManager com.example.ble_imu_data_viewer W startInputReason = 1
  20. 2023-06-11 19:57:11.937 1263-1506 HiDATA_HiNetwork system_server E monitor handleActivityChange curPkgName is com.example.ble_imu_data_viewer curUid is 10174 lastPkgName is :com.example.ble_imu_data_viewer
  21. 2023-06-11 19:57:11.938 1730-10535 DollieAdapterService com.huawei.systemserver E notifyActivityState pkg:com.example.ble_imu_data_viewer/com.example.ble_imu_data_viewer.MainActivity state:2 fg:true mUid:10174
  22. ...

我已经通过在Manifest文件中声明了所请求的权限BLUETOOTH_SCAN

  1. <uses-permission android:name="android.permission.BLUETOOTH_SCAN" tools:remove="android:maxSdkVersion"/>

完整的源代码和完整的Logcat内容如下:
AndroidManifest.xml
MainActivity.java
build.gradle
Complete Logcat content

zazmityj

zazmityj1#

我最终自己解决了这个问题。
虽然我在清单文件中声明了BLUETOOTH_SCAN和BLUETOOTH_CONNECT权限,但它们不是在我的上下文中询问的正确权限。这两个权限只适用于Android 12(API级别31)或更高版本,但我的应用运行在Android 9(API级别28)上。对于等于或低于11(API级别30)的Android版本,应用需要在运行时请求ACCESS_FINE_LOCATION(对于API级别28或更低级别,则为ACCESS_COARSE_LOCATION)权限。
有关更多详细(重要)信息,请参阅Bluetooth permissions | Android Developers

相关问题