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

React Native Android端振动功能无法正常工作问题排查求助

React Native 振动功能无响应排查方案

问题概况

已在React Native项目中实现振动功能,测试按钮调用代码:

Vibration.vibrate(1000)

同时在两个AndroidManifest.xml文件中添加了权限声明:

<uses-permission android:name="android.permission.VIBRATE" />

删除android/app/build目录重新构建后,手机仍无振动反馈(手机未处于静音模式,其他应用振动功能正常)。

排查与解决步骤

  • 修正权限添加位置:仅需在android/app/src/main/AndroidManifest.xml中添加VIBRATE权限即可,项目根目录的AndroidManifest.xml无需重复配置,多余的权限声明可移除。
  • 验证API使用正确性:
    • React Native 0.60+版本需确保正确导入模块:
      import { Vibration } from 'react-native';
      
    • 部分Android设备对振动时长有最低限制,可调整时长至200ms或500ms测试:
      Vibration.vibrate(500);
      
    • 尝试使用重复振动模式排查单时长振动的兼容性问题:
      Vibration.vibrate([0, 500, 200, 500]); // 无延迟启动→振动500ms→等待200ms→振动500ms
      
  • 彻底清理构建缓存:
    执行以下命令清理缓存后重新构建,确保权限变更生效:
    cd android && ./gradlew clean
    # 回到项目根目录重新运行
    npx react-native run-android
    
  • 检查设备振动设置:
    进入手机「设置-声音与振动」,确认「触摸振动」「系统振动」等相关开关处于开启状态,部分定制ROM会单独限制APP振动权限。
  • 添加动态权限校验(可选):
    虽然VIBRATE属于Android正常权限(无需动态申请),但部分定制ROM存在特殊限制,可添加校验代码确保权限正常:
    import { PermissionsAndroid } from 'react-native';
    
    const checkVibrationPermission = async () => {
      let granted = await PermissionsAndroid.check(PermissionsAndroid.PERMISSIONS.VIBRATE);
      if (!granted) {
        granted = await PermissionsAndroid.request(PermissionsAndroid.PERMISSIONS.VIBRATE) === PermissionsAndroid.RESULTS.GRANTED;
      }
      return granted;
    };
    
    // 调用振动前校验权限
    checkVibrationPermission().then(granted => {
      granted && Vibration.vibrate(1000);
    });
    

内容的提问来源于stack exchange,提问作者JaRoMaster

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.30 09:43:22