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

应用跳转至首个Activity问题求助:特定Fragment触发异常

解决华为设备上Fragment切换触发Activity回退及HsmCoreServiceImpl 102错误

这个问题是华为设备特有的硬件安全模块(HsmCoreServiceImpl)IPC调用异常导致的,code 102通常对应跨进程调用失败或权限/资源冲突,结合你提到的多Fragment集成媒体播放器的场景,我整理了几个针对性的排查和解决方向:

1. 严格管控媒体播放器资源释放

多个Fragment都持有媒体播放器时,最容易出现的问题就是资源未及时释放,导致系统资源冲突触发华为安全服务的异常。你需要在Fragment的生命周期方法中精准管控MediaPlayer的状态:

@Override
public void onPause() {
    super.onPause();
    if (mediaPlayer != null && mediaPlayer.isPlaying()) {
        mediaPlayer.pause();
    }
}

@Override
public void onStop() {
    super.onStop();
    if (mediaPlayer != null) {
        mediaPlayer.release();
        mediaPlayer = null;
    }
}

@Override
public void onDestroyView() {
    super.onDestroyView();
    // 额外兜底,避免Fragment重建时残留资源引用
    if (mediaPlayer != null) {
        mediaPlayer.release();
        mediaPlayer = null;
    }
}

注意:切换Fragment时,一定要让前一个Fragment的播放器完全释放,禁止多个Fragment同时持有活跃的MediaPlayer实例。

2. 检查媒体权限的适配完整性

华为设备对媒体权限的管控比其他品牌更严格,即使Manifest中声明了权限,也需要做好动态申请和版本适配:

  • Android 13+ 需申请 READ_MEDIA_AUDIO 权限
  • Android 10-12 需申请 READ_EXTERNAL_STORAGE 权限
    确保在进入目标Fragment前,权限已经被用户授予,避免因权限缺失导致系统服务调用失败。

3. 尝试切换媒体解码方式

特定Fragment的媒体格式可能和华为设备的硬件解码器不兼容,触发Hsm服务的异常。你可以强制使用软件解码来测试:

// MediaCodec方式禁用硬件加速
MediaFormat format = MediaFormat.createAudioFormat(MediaFormat.MIMETYPE_AUDIO_MPEG, sampleRate, channelCount);
MediaCodec codec = MediaCodec.createDecoderByType(MediaFormat.MIMETYPE_AUDIO_MPEG);
codec.configure(format, null, null, 0);

// MediaPlayer方式尝试兼容
mediaPlayer.setAudioAttributes(new AudioAttributes.Builder()
    .setUsage(AudioAttributes.USAGE_MEDIA)
    .setContentType(AudioAttributes.CONTENT_TYPE_MUSIC)
    .build());
mediaPlayer.setDataSource(context, uri);
mediaPlayer.prepareAsync();

4. 捕获跨进程调用异常

HsmCoreServiceImpl: onTransact in code is: 102本质是跨进程IPC调用失败,你需要在媒体播放器相关代码块中捕获系统级异常,避免异常扩散导致Activity被系统重启:

try {
    mediaPlayer.prepare();
    mediaPlayer.start();
} catch (IOException | IllegalStateException | RemoteException e) {
    Log.e("MediaPlayerError", "Playback failed: " + e.getMessage());
    // 异常兜底处理:重置播放器或提示用户
    if (mediaPlayer != null) {
        mediaPlayer.reset();
    }
}

5. 检查华为设备的系统设置

部分华为设备的隐私保护或后台管控可能限制应用的媒体资源访问:

  • 进入设备「设置」-「应用和服务」-「权限管理」,确认应用拥有「媒体」相关权限
  • 检查「电池优化」设置,避免应用被后台限制导致资源强制回收
  • 临时关闭「隐私空间」或「多用户模式」,测试是否是多环境下的权限冲突

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.21 03:37:43