Flutter 在生产环境中不显示位置权限请求(Android)

问题描述 投票:0回答:1

我最近在 Google Play 上发布了一个 Flutter 应用程序。它在开发过程中运行良好,但在 Google Play 上发布的版本从不要求位置权限。它会自动将位置权限标记为永久拒绝。

这是应该触发位置权限请求的函数:

  _getUserLocation() {
    if(context.read<UserLocationCubit>().state == null) {
      Permission.locationWhenInUse.request().then((PermissionStatus permissionStatus) {
        // If permission granted (permanently or not)...
        if(permissionStatus != PermissionStatus.permanentlyDenied && permissionStatus != PermissionStatus.denied) {
          setState(() {
            locationDenied = false;
          });
          Geolocator.getCurrentPosition(
            locationSettings: const LocationSettings(
              accuracy: LocationAccuracy.high,
            ),
          ).then((Position position) {
            LatLng newPosition = LatLng(position.latitude, position.longitude);
            context.read<UserLocationCubit>().set(
              location: newPosition,
            );
            setState(() {
              userLocation = newPosition;
            });
          });
        } else { // If permission denied (permanently or not)...
          setState(() {
            locationDenied = true;
          });
        }
      });
    } else {
      /* More stuff */
    }
  }

locationDenied
是一个可以为空的
bool?
,但是从Google Play安装我的应用程序后,这个函数被调用,当
locationDenied
true
时,我看到了预期的屏幕,并且它只能设置为
true
通过这个函数。结论:我的应用程序默认自动拒绝位置权限,甚至没有询问。

当我进入我的应用程序设置(紧随其后)时,我看到以下内容:
位置权限不允许

我的 pupspec.yaml 如下:

name: he_name_of_my_app
description: "The_name_of_my_app"
publish_to: 'none' # Remove this line if you wish to publish to pub.dev
version: 1.0.9+9

environment:
  sdk: '>=3.4.0-268.0.dev <4.0.0'

dependencies:
  flutter:
    sdk: flutter

  app_links: ^6.2.1
  bloc: ^8.1.4
  carousel_slider: ^5.0.0
  cupertino_icons: ^1.0.6
  flutter_bloc: ^8.1.6
  flutter_secure_storage: ^9.2.2
  flutter_svg: ^2.0.10+1
  geolocator: ^13.0.1
  get: ^4.6.6
  google_fonts: ^6.2.1
  google_maps_flutter: ^2.9.0
  http: ^1.2.2
  image_picker: ^1.1.2
  mobile_scanner: ^5.2.1
  permission_handler: ^11.3.1
  qr_flutter: ^4.1.0
  share_plus: ^10.0.2
  # syncfusion_flutter_charts: ^26.2.10
  syncfusion_flutter_pdfviewer: ^26.2.10
  url_launcher: ^6.3.0
  webview_flutter: ^4.9.0

dev_dependencies:
  flutter_test:
    sdk: flutter

  flutter_lints: ^3.0.0

flutter:
  uses-material-design: true

  assets:
    - assets/images/
    - assets/documents/terms_and_conditions.pdf

搜索了大量网站后,没有一个让我找到解决方案。这是我尝试过的:

  • 当然,我完全删除了该应用程序并且

    flutter clean

  • 我检查了我的AndroidManifest,看起来像这样:

<manifest xmlns:android="http://schemas.android.com/apk/res/android">
    <uses-permission android:name="android.permission.FOREGROUND_SERVICE" />
    <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
    <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
    <uses-permission android:name="android.permission.INTERNET" />
    <application
        android:label="The_name_of_my_app"
        android:name="${applicationName}"
        android:icon="@mipmap/ic_launcher"
        android:usesCleartextTraffic="true"
        >
        <activity
            android:name=".MainActivity"
            android:exported="true"
            android:launchMode="standard"
            android:taskAffinity=""
            android:theme="@style/LaunchTheme"
            android:configChanges="orientation|keyboardHidden|keyboard|screenSize|smallestScreenSize|locale|layoutDirection|fontScale|screenLayout|density|uiMode"
            android:hardwareAccelerated="true"
            android:windowSoftInputMode="adjustResize">
            <meta-data
              android:name="io.flutter.embedding.android.NormalTheme"
              android:resource="@style/NormalTheme"
              />
            <intent-filter>
                <action android:name="android.intent.action.MAIN"/>
                <category android:name="android.intent.category.LAUNCHER"/>
            </intent-filter>
        </activity>
        <meta-data
            android:name="flutter_deeplinking_enabled"
            android:value="true" />
        <meta-data
            android:name="flutterEmbedding"
            android:value="2" />
        <meta-data
            android:name="com.google.android.geo.API_KEY"
            android:value="my_api_key" />
    </application>
    <queries>
        <intent>
            <action android:name="android.intent.action.PROCESS_TEXT"/>
            <data android:mimeType="text/plain"/>
        </intent>
    </queries>
</manifest>
  • 我将请求从

    Permission.location
    更改为
    Permission.locationWhenInUse
    ,这样 Google 就不会认为我想要获取任何其他类型的位置,例如后台位置或更精细的位置,而我没有在 AndroidManifest 中添加这些位置。该应用程序不适用于
    Permission.location

  • 我确保我的 AppBundle 处于发布模式。

  • 我尝试在 Google Play 版本上使用相机权限,以确保问题仅与位置一相关。正常弹出相机权限请求。

  • 我尝试在其他具有不同Android版本的手机上下载Google Play版本。他们所有人都有同样的问题。

考虑到我的应用程序已经上线,任何帮助将不胜感激!预先感谢您。

android flutter geolocation google-play android-permissions
1个回答
0
投票

正在进行调试但未进行生产,这可能是由于多种因素造成的。

  1. 尝试添加 内部应用程序标签。
  2. 使用混淆器
  3. 通过 flutter run --release 在本地检查 希望对你有帮助
© www.soinside.com 2019 - 2024. All rights reserved.