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

Android 6.0录音权限应用运行崩溃问题求助(附Logcat日志)

解决Android 6.0下音频录制应用崩溃问题

首先,你的应用在Android 4正常但Android 6+崩溃,最核心的原因是Android 6.0(API 23)引入了运行时权限机制——RECORD_AUDIO属于「危险权限」,这类权限不能仅通过Manifest声明就直接使用,必须在运行时主动向用户申请并获得授权后才能调用相关功能。结合日志和你的应用场景,我整理了以下解决方案:

一、优先修复运行时权限问题(核心崩溃原因)

1. 确认Manifest权限声明

首先确保你已经在AndroidManifest.xml中声明了必要权限:

<uses-permission android:name="android.permission.RECORD_AUDIO" />
<!-- 如果需要上传音频到服务器,还要保留网络权限 -->
<uses-permission android:name="android.permission.INTERNET" />

2. 实现运行时权限申请逻辑

在启动录音操作前,必须先检查权限是否已授予,未授予则主动申请:

// 自定义请求码,用于后续识别权限申请结果
private static final int REQUEST_RECORD_AUDIO_PERMISSION = 1001;

// 检查并申请录音权限
private void checkRecordPermission() {
    if (ContextCompat.checkSelfPermission(this, Manifest.permission.RECORD_AUDIO)
            != PackageManager.PERMISSION_GRANTED) {
        // 未授予权限,向用户申请
        ActivityCompat.requestPermissions(this,
                new String[]{Manifest.permission.RECORD_AUDIO},
                REQUEST_RECORD_AUDIO_PERMISSION);
    } else {
        // 已授予权限,直接启动录音流程
        startAudioRecording();
    }
}

3. 处理权限申请结果

重写Activity的onRequestPermissionsResult方法,根据用户的选择处理后续逻辑:

@Override
public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {
    super.onRequestPermissionsResult(requestCode, permissions, grantResults);
    if (requestCode == REQUEST_RECORD_AUDIO_PERMISSION) {
        if (grantResults.length > 0 && grantResults[0] == PackageManager.PERMISSION_GRANTED) {
            // 用户同意权限,启动录音
            startAudioRecording();
        } else {
            // 用户拒绝权限,给出友好提示
            Toast.makeText(this, "需要录音权限才能使用该功能", Toast.LENGTH_SHORT).show();
        }
    }
}

二、处理日志中的其他潜在问题

从你提供的Logcat中,还有几个需要排查的错误点:

1. 缺失AdGuardService类

日志显示:Could not find class 'com.cloudtech.ads.core.AdGuardService', referenced from method com.cloudtech.ads.core.CTService.b

  • 可能原因:广告SDK版本不兼容Android 6+,或者ProGuard混淆时误删除了该类;
  • 解决方案:
    • 升级广告SDK到支持API 23的最新版本;
    • 在ProGuard规则中添加保留该类的配置:
      -keep class com.cloudtech.ads.core.AdGuardService { *; }
      

2. Google Play Services相关错误

日志多次出现:GooglePlayServices is unavailable 2和资源缺失提示

  • 可能原因:设备上的Google Play Services版本过低,或者项目依赖的版本不兼容;
  • 解决方案:
    • 使用GoogleApiAvailability检查并提示用户更新:
      GoogleApiAvailability apiAvailability = GoogleApiAvailability.getInstance();
      int resultCode = apiAvailability.isGooglePlayServicesAvailable(this);
      if (resultCode != ConnectionResult.SUCCESS) {
          if (apiAvailability.isUserResolvableError(resultCode)) {
              apiAvailability.getErrorDialog(this, resultCode, 9000).show();
          }
      }
      
    • 确保项目中依赖的Google Play Services版本与目标设备兼容,避免使用过高版本的依赖。

三、测试验证

完成上述修复后,在Android 6.0及以上设备上测试:

  • 首次启动应用时,会弹出录音权限申请弹窗;
  • 同意权限后,录音和上传功能正常工作,不会崩溃;
  • 拒绝权限时,应用能友好提示,不会出现崩溃。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.28 07:10:53