在Android中的清单文件中未找到权限。

3
我一直在尝试使用各种方法调用我的位置数据,包括IP位置API和Flutter插件,但是没有能够获得准确的位置数据。经过所有尝试后,我选择了Geolocator。但我一直遇到以下问题:
I/flutter ( 5206): null
I/flutter ( 5206): GeolocationStatus.unknown

在我的初始化状态中调用它如下所示:

  void initState() {
    super.initState();
    fetchData();
  }


  fetchData() async {
    setState(() {
      isLoading = true; //Data is loading
    });
    GeolocationStatus geolocationStatus =
        await Geolocator().checkGeolocationPermissionStatus();
    position = await Geolocator()
        .getCurrentPosition(desiredAccuracy: LocationAccuracy.high);
    if (position != null) {
      lastPosition = await Geolocator()
          .getLastKnownPosition(desiredAccuracy: LocationAccuracy.high);
    }

    ...

    if (position != null)
      print(position);
    else
      print(lastPosition);

    print(geolocationStatus);

    setState(() {
      isLoading = false; //Data has loaded
    });
  }

经过一些研究,我决定采用permission_handler来尝试检查权限。我声明了PermissionStatus _status并在我的fetchData()函数中添加了以下几行代码:
PermissionHandler()
        .checkPermissionStatus(PermissionGroup.location);

我得到的是: No permissions found in manifest for: 3,根据我的理解,我的清单文件已经包含了所需的权限。清单文件:https://gist.github.com/Purukitto/640d1637c05bdb1b69cc4309947c45d5 据我所知,将权限添加到清单中应该至少在应用程序中添加权限选项,但是构建并安装应用程序后,我的应用程序没有“权限”(附有截图)。
问题可能出在哪里?我已经尽力提及所有相关事项。任何见解都将非常有帮助。

Screenshot

4个回答

11

这个问题与Flutter包permission_handler的ReadMe有关,作为设置AndroidManifest.xml以请求权限的示例。

如果您的设备要求用户授权出现问题,可能是因为它设置得不正确。

为了详细解释 rollcake 的回答:
1. 如果您还不知道需要哪些权限,请到Android Developer页面上查看列表和语法。
2. 在您的项目中,打开:android/app/src/main/AndroidManifest.xml
3. 按照以下示例将您的权限插入:

<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.your.package">

    <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
    <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
    <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />

    <application
        android:name="io.flutter.app.FlutterApplication"
        ...<and so on>...

顺便提一下:您的项目中有不同的AndroidManifest.xml文件(...src/debug、...src/profile和...src/main)。按照上面描述的方法将权限添加到main版本应该可以运行,但如果您注意到不一致的行为,请确保将所有权限放在同一个AndroidManifest文件中。


1

如果目标SDK版本是23,则需要检查运行时权限,您可以在Android 6及以上版本中使用checkSelfPermission()requestPermissions()


0

1. 在 AndroidMenifest.xml 中添加它们

<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" android:maxSdkVersion="32"></uses-permission>
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" android:maxSdkVersion="30"></uses-permission>
<uses-permission android:name="com.google.android.gms.permission.AD_ID"></uses-permission>
<uses-permission android:name="android.permission.READ_MEDIA_IMAGES"></uses-permission>
<uses-permission android:name="android.permission.READ_MEDIA_VIDEO"></uses-permission>
<uses-permission android:name="android.permission.READ_MEDIA_AUDIO"></uses-permission>

2. 更新权限处理程序包:

包链接:https://pub.dev/packages/permission_handler


0

在flutterProject中打开Android项目

点击清单文件

插入权限

<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />

请检查链接以获取清单文件。我已经添加了上述内容。 - undefined
如果使用Flutter权限,Flutter会自动处理Android的权限对话框。如果您取消了权限对话框,那么会怎样呢? - undefined

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接