我最近在 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版本。他们所有人都有同样的问题。
考虑到我的应用程序已经上线,任何帮助将不胜感激!预先感谢您。
正在进行调试但未进行生产,这可能是由于多种因素造成的。