如何使用Expo向Android申请Activity Recognition权限?
如何在Expo React Native应用中申请Activity Recognition权限?
你当前的配置和代码无法触发权限弹窗,问题出在Expo环境下需要使用专属的权限处理方案,而非直接调用React Native的PermissionsAndroid。以下是可行的解决步骤:
1. 安装Expo Activity Recognition依赖
Expo提供了专门处理活动识别权限的库,先完成安装:
npx expo install expo-activity-recognition
2. 修正app.json配置
无需重复添加两个权限声明,在app.json的expo.permissions数组中保留"ACTIVITY_RECOGNITION"即可,Expo会自动根据Android版本适配对应的权限:
{ "expo": { "permissions": [ "ACTIVITY_RECOGNITION" ] } }
3. 使用Expo库申请权限
替换原有的PermissionsAndroid代码,改用expo-activity-recognition提供的方法触发权限弹窗:
import * as ActivityRecognition from 'expo-activity-recognition'; async function requestActivityRecognitionPermission() { try { const { status } = await ActivityRecognition.requestPermissionsAsync(); if (status === 'granted') { console.log('权限已授予'); } else { console.log('权限被拒绝'); } } catch (err) { console.warn(err); } } // 可在组件挂载等合适时机调用该方法 // useEffect(() => { // requestActivityRecognitionPermission(); // }, []);
针对Bare Workflow(已 eject 的项目)
如果你的项目是Bare Workflow,除了上述步骤,还需要手动在android/app/src/main/AndroidManifest.xml中添加权限声明:
<!-- Android 10及以上 --> <uses-permission android:name="android.permission.ACTIVITY_RECOGNITION" /> <!-- Android 9及以下兼容 --> <uses-permission android:name="com.google.android.gms.permission.ACTIVITY_RECOGNITION" />
内容的提问来源于stack exchange,提问作者XypriL
相关产品推荐
相关产品推荐

