首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >颤振应用程序在华为的定位许可被拒绝时崩溃

颤振应用程序在华为的定位许可被拒绝时崩溃
EN

Stack Overflow用户
提问于 2022-06-23 12:15:58
回答 1查看 838关注 0票数 2

我正在为华为设备实现设备定位,它在获得许可时工作,但当被拒绝时,应用程序正在崩溃。

谷歌的位置从来没有发生过。

以下是我获取位置的代码:

代码语言:javascript
复制
Future<Location?> getAccuratePositionH() async {
  PermissionHandler permissionHandler = PermissionHandler();
  bool status = await permissionHandler.requestLocationPermission();
  if (status) {
    FusedLocationProviderClient locationService = FusedLocationProviderClient();
    Location location = await locationService.getLastLocation();
    return location;
  }
  else {
    return null;
  }
}

这就是我在控制台得到的信息:

代码语言:javascript
复制
I/cgr.qrmv.QrMobVisPlugin( 5178): Permissions request denied.
W/cgr.qrmv.QrMobVisPlugin( 5178): Starting QR Mobile Vision failed
W/cgr.qrmv.QrMobVisPlugin( 5178): com.github.rmtmckenzie.qrmobilevision.QrReader$Exception: QR reader failed because noPermissions

代码语言:javascript
复制
java.lang.RuntimeException: Failure delivering result ResultInfo{who=@android:requestPermissions:, request=1, result=-1, data=Intent { act=android.content.pm.action.REQUEST_PERMISSIONS (has extras) }} to activity {com.lea24.partyfinder/com.lea24.partyfinder.MainActivity}: java.lang.NullPointerException: Attempt to read from field 'io.flutter.plugin.common.MethodChannel$Result com.github.rmtmckenzie.qrmobilevision.QrMobileVisionPlugin$ReadingInstance.startResult' on a null object reference

为什么这里是QR移动视觉?我不知道,真的,这是在拒绝了位置许可之后发生的。

我做错了什么,怎么解决呢?

EN

回答 1

Stack Overflow用户

发布于 2022-09-13 08:12:11

我迟到了,但这可能会对其他面临这个问题的人有所帮助,我也面临着同样的问题,经过一番努力,我终于找到了对我有用的原因和解决方案。希望它也能对你起作用。

如果权限被拒绝,则该权限将被永久拒绝。因此,用户必须手动更改设置。您所能做的就是将用户重定向到设置。在请求许可之前,请确保许可没有被拒绝,否则它将在没有任何警告的情况下使您的应用程序崩溃,如下代码所示。

下面是一个代码,它使用permission_handler请求权限,使用Getx显示无内容对话框。此函数将返回权限状态,您可以通过检查是否允许使用它来继续使用它。

代码语言:javascript
复制
PermissionStatus status = await requestLocalStoragePermission();
if (status.isGranted) {
//proceed
}

全码

代码语言:javascript
复制
import 'package:flutter/material.dart';
import 'package:get/get.dart';
import 'package:permission_handler/permission_handler.dart';

代码语言:javascript
复制
Future<PermissionStatus> requestLocalStoragePermission() async {

  PermissionStatus status;
  if ((await Permission.storage.isPermanentlyDenied) ||
      (await Permission.storage.isDenied)) {
    status = PermissionStatus.denied;
    Get.dialog(
      AlertDialog(
        //Getx dialog is used, you may use default other dialog based on your requirement
        title: const Text(
          "Storage permission required!",
          textAlign: TextAlign.center,
          style: TextStyle(
            fontWeight: FontWeight.bold,
          ),
        ),
        shape:
            RoundedRectangleBorder(borderRadius: BorderRadius.circular(30.0)),
        content: const Text(
          "Storage permission is required to download files",
          textAlign: TextAlign.center,
        ),
        actions: <Widget>[
          Center(
            child: TextButton(
              onPressed: () async => {
                await openAppSettings(), //function in permission_handler
                Get.back() //close dialog
              },
              child: const Text("Grant Permission"),
            ),
          ),
        ],
      ),
    );
  } else {
    try {
      status = await Permission.storage.request();
    } catch (err) {
      status = PermissionStatus.denied;
    }
  }
  return status;
}
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/72730011

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档