You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Expo React Native读取SMS权限请求无响应问题求助

解决Expo React Native读取短信权限请求无反应的问题

问题根源

  1. 未配置权限声明:Android系统要求必须在应用配置文件中提前声明所需权限,否则权限请求不会触发弹窗。
  2. Expo Go环境限制:Expo Go作为通用预构建应用,不支持READ_SMS这类敏感权限的请求,必须使用自定义开发客户端或构建正式安装包测试。
  3. 权限调用流程缺失前置检查:直接发起权限请求前,未先校验当前权限状态,可能导致无意义的请求或静默失败。

解决方案

步骤1:配置app.json权限声明

在项目根目录的app.json文件中,将READ_SMS权限添加到Android权限列表:

{
  "expo": {
    "android": {
      "permissions": ["android.permission.READ_SMS"]
    }
  }
}

步骤2:优化权限请求代码

添加权限状态检查,优化错误提示逻辑,确保请求流程更健壮:

import 'react-native-gesture-handler';
import { StatusBar } from 'expo-status-bar';
import React from 'react';
import { StyleSheet, View, Button, PermissionsAndroid, Alert } from 'react-native';

export default function App() {
  async function handleSmsPermissionRequest() {
    try {
      // 先检查是否已授权
      const isAuthorized = await PermissionsAndroid.check(PermissionsAndroid.PERMISSIONS.READ_SMS);
      if (isAuthorized) {
        Alert.alert('提示', '你已拥有读取短信的权限');
        return;
      }

      // 发起权限请求
      const granted = await PermissionsAndroid.request(
        PermissionsAndroid.PERMISSIONS.READ_SMS,
        {
          title: '应用短信读取权限申请',
          message: '本应用需要访问你的短信内容,以便在应用内展示相关信息',
          buttonNeutral: '稍后再说',
          buttonNegative: '取消',
          buttonPositive: '允许',
        },
      );

      if (granted === PermissionsAndroid.RESULTS.GRANTED) {
        Alert.alert('权限已授予', '现在可以读取短信内容了');
      } else {
        Alert.alert('权限被拒绝', '无法读取短信,请前往系统设置手动开启权限');
      }
    } catch (err) {
      console.error('权限请求出错:', err);
      Alert.alert('错误', '请求权限时发生异常,请稍后重试');
    }
  }

  return (
    <View style={styles.container}>
      <Button
        title="请求短信读取权限"
        onPress={handleSmsPermissionRequest}
      />
      <StatusBar style="auto" />
    </View>
  );
}

const styles = StyleSheet.create({
  container: {
    flex: 1,
    backgroundColor: '#fff',
    alignItems: 'center',
    justifyContent: 'center',
  },
});

步骤3:更换测试环境

由于Expo Go不支持敏感权限,需通过以下方式测试:

  • 自定义开发客户端:执行expo run:android构建并安装自定义开发客户端,在该客户端内测试权限请求。
  • 构建APK:执行expo build:android生成安装包,安装到设备后进行测试。

额外提示

  • 确保使用最新稳定版Expo SDK,避免版本兼容问题。
  • 如果用户曾手动拒绝过权限,需引导其前往设备的应用权限设置页面手动开启。

内容的提问来源于stack exchange,提问作者Mr.EmD

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.09 09:15:35