我有一个应用程序,当我使用 Expo 运行时,权限工作正常,并且对话框似乎接受或拒绝它们。但是,当我使用 expo build:android 生成 apk 并将其安装在我的手机上时,该应用程序不会询问我的权限。在应用程序管理器中,我的应用程序没有显示任何已被接受或拒绝的权限,因此我无法手动启用它们。
这是我的 App.json
{
"expo": {
"name": "dev-1",
"slug": "dev-1",
"privacy": "public",
"sdkVersion": "36.0.0",
"platforms": ["ios", "android", "web"],
"version": "1.0.1",
"orientation": "portrait",
"icon": "./assets/icon.png",
"splash": {
"image": "./assets/splash.png",
"resizeMode": "contain",
"backgroundColor": "#ffffff"
},
"updates": {
"fallbackToCacheTimeout": 0
},
"assetBundlePatterns": ["**/*"],
"ios": {
"supportsTablet": true
},
"android": {
"package": "com.fernandoAzarias.tenedores",
"permissions": ["CAMERA_ROLL", "LOCATION"],
"versionCode": 2
},
"description": "An app just for learn React Native"
}
}
这是获取权限的部分代码
const changeAvatar = async () => {
const resultPermissions = await Permissions.askAsync(
Permissions.CAMERA_ROLL
);
console.log(resultPermissions);
setLog([...log, resultPermissions]);
if (resultPermissions.granted) {
const result = await ImagePicker.launchImageLibraryAsync({
allowsEditing: true,
aspect: [4, 3]
});
setLog 保存权限对象,它允许我在屏幕上显示它们。我得到这个作为回应:
{
canAskAgain: false
expires: never,
granted: false
Permissions: {
cameraRoll: {
canAskAgain: false
expires: never
granted: false
status: denied
}
}
}
显然该应用程序没有权限,但在应用程序管理器中该应用程序没有任何权限并且它没有显示任何内容,所以我无法启用禁用。
我希望你能帮助我。
根据我对 expo 的经验,首先它取决于 sdk,然后您必须考虑它已经是已编译的应用程序时必须具有的权限列表,如文档中所述。
换句话说: ["CAMERA_ROLL"] 只要您处于开发阶段就可以工作,["CAMERA"] 可以在准备好“生产”时工作
您可以在此处找到权限列表: https ://docs.expo.io/versions/latest/sdk/permissions/#permissionscamera
您还可以在此处检查 android 设备具有的权限。 https://developer.android.com/reference/android/Manifest.permission#CAMERA