Android10及以上版本ZBarScannerView扫码后触发振动失效如何解决?
问题原因
Android 10及以上版本振动不生效主要由以下几个常见原因导致:
- 权限适配缺失:Android 12(API 31)及以上系统对振动服务的调用做了更严格的权限校验,原有仅声明
VIBRATE权限的配置无法覆盖高版本要求 - 未判断振动服务可用性:如果设备不支持振动、振动服务获取失败,调用方法会直接被系统忽略
- 系统限制拦截:Android 10之后新增触摸振动总开关,若用户关闭该开关、开启省电模式/勿扰模式,第三方应用的主动振动请求会被系统拦截
- 业务逻辑抢占资源:扫码成功后如果立刻执行预览重启、页面跳转等逻辑,可能导致振动请求还未被系统处理就被销毁
修复步骤
第一步:补全权限声明
若应用targetSdkVersion >= 31,需要在AndroidManifest.xml中新增适配权限:<!-- 原有振动权限保留 --> <uses-permission android:name="android.permission.VIBRATE" /> <!-- API 31及以上新增权限,用于获取振动服务状态 --> <uses-permission android:name="android.permission.ACCESS_VIBRATOR_STATE" />第二步:优化振动调用逻辑
调用前先校验设备和服务可用性,适配高版本系统的服务获取方式:private void vibrate() { Vibrator vibrator = (Vibrator) getSystemService(Context.VIBRATOR_SERVICE); // 先判断设备是否支持振动、服务是否正常 if (vibrator == null || !vibrator.hasVibrator()) { return; } // Android 12及以上推荐使用VibratorManager获取振动实例 if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.S) { VibratorManager vibratorManager = (VibratorManager) getSystemService(Context.VIBRATOR_MANAGER_SERVICE); if (vibratorManager != null) { vibrator = vibratorManager.getDefaultVibrator(); } } if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) { vibrator.vibrate(VibrationEffect.createOneShot(500, VibrationEffect.DEFAULT_AMPLITUDE)); } else { vibrator.vibrate(500); } }第三步:调整业务代码调用顺序
避免后续逻辑抢占系统资源导致振动请求被丢弃,优化后的业务代码示例:private void submitQRcode(String houseid) { // 先触发振动 vibrate(); Log.d(TAG, "submitQRcode: " + houseid); if (houseid.substring(0, 2).matches("^[HhPp]+$")) validateTypeOfCollection(houseid); else if (houseid.substring(0, 2).matches("^[GgPp]+$")) startSubmitQRAsyncTask(houseid, -1, null); else if (houseid.substring(0, 2).matches("^[DdYy]+$")) getDumpYardDetails(houseid); else { AUtils.warning(QRcodeScannerActivity.this, mContext.getResources().getString(R.string.qr_error)); // 扫码错误需重启预览时,延迟100ms执行,保证振动请求先被系统处理 new Handler(Looper.getMainLooper()).postDelayed(this::restartPreview, 100); } }第四步:兼容厂商定制系统
小米、华为等国产定制系统会默认禁止第三方应用的振动权限,若上述配置都生效仍无振动,可引导用户手动开启:应用信息 -> 权限管理 -> 允许振动,或在通知管理中开启振动权限。
内容的提问来源于stack exchange,提问作者amol
相关产品推荐
相关产品推荐

