我试图使用React Native在Android设备上生成应用程序的签名APK。 解决了几个问题后,所有内容似乎都可以正常工作,但是在显式调用权限提示时以及相关功能方面都存在问题。
在调试版本上,一切正常运行,权限提示和相关组件(地理位置)始终运行。
该android设备运行OS 7.1.1-SDK 25,我选择了该应用的位置许可,但它无法从该设备获取信息。
我还使用了react-native-image-picker模块,该模块在需要时调用权限对话框,在发布时有效。
app / build.gradle
android {
compileSdkVersion 25
buildToolsVersion '28.0.3'
defaultConfig {
applicationId "com.remetaldriverapp"
minSdkVersion 25
targetSdkVersion 25
versionCode 1
versionName "1.0"
ndk {
abiFilters "armeabi-v7a", "x86"
}
}
...
}
AndroidManifest.xml
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.remetaldriverapp">
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission
android:name="android.permission.SYSTEM_ALERT_WINDOW"/>
<uses-permission
android:name="android.permission.ACCESS_FINE_LOCATION"/>
<uses-permission android:name="android.permission.CAMERA" />
<uses-permission
android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION"/>
<uses-feature android:name="android.hardware.location.gps" />
<uses-feature android:name="android.hardware.location.network" />
...
我还向用户请求对我的App.js的许可
requestGeoLocationPermission = async () => {
try {
const perm = await PermissionsAndroid.request(
PermissionsAndroid.PERMISSIONS.ACCESS_FINE_LOCATION,
{
'title': 'This App needs permission to use your location',
'message': 'please choose an option ',
}
);
console.log('asking for permission', perm);
const granted = await PermissionsAndroid.check( PermissionsAndroid.PERMISSIONS.ACCESS_FINE_LOCATION );
console.log('asking for granted', granted);
if (granted) {
console.log("Geolocation activated");
return this.watchLocation();
} else {
console.log("Geolocation disabled")
return -1;
}
} catch (err) {
console.log('failed geolocation');
console.warn(err)
}
}
我希望设备能够提示权限对话框,或者按预期从设备中检索地理位置信息,但是这些都没有发生。