Android音频焦点的问题与闪屏页实现方法

背景:今天为了修复厂商反馈的关于音频焦点交互的问题。
问题1:(听伴是我们的应用名称)听伴播放->按下静音键->听伴处于暂停状态并主机静音->按下语音键/打电话-退出语音/挂断电话->听伴抢source并播放。正确逻辑应该是听伴不抢source并且不播放。
分析1:通过分析log及与对方开发确认。系统方的静音是一个音源,静音去抢夺了音频焦点,导致听伴失去焦点后执行pause操作,但是这种pause属于被动暂停,是可以被恢复的。且对方定制了需求,当应用回到前台的时候如果不是主动暂停的话,就要去抢焦点并播放。这样就产生了逻辑冲突。
解决1:这样就不能再Activity的onResume中做当应用回到前台的时候如果不是主动暂停的话,就要去抢焦点并播放的需求了。由于各应用之间的交互是通过startActivity的方式,这样我们就可以在onNewIntent中进行焦点的定制处理。
	//在我们的主Activity(MainActivity)中添加了mAudioPlayOnNewIntentInter接口的功能
	//在渠道适配的时候,使用反射查找实现类,如果能找到实现类mAudioPlayOnNewIntentInter != null
    @Override
    protected void onNewIntent(Intent intent) {
        super.onNewIntent(intent);
        if (mAudioPlayOnNewIntentInter != null) {
            mAudioPlayOnNewIntentInter.resumeAudioPlayOnNewIntent();
        }
    }
问题2:添加了相应的功能后测试发现,MainActivity中的onNewIntent并没有走。
分析2:车机主界面中我们应用的入口是SplashActivity(闪屏页)如下方法是防止闪屏页面多次打开并显示的逻辑,因此导致了finish后直接显示了MainActivity而并没有通过startactivity的方式走,所以MainActivity中onNewIntent回调没有走
//在SplashActivity的onCreate中添加了如下方法
if (!this.isTaskRoot() && getIntent() != null) {
            String action = getIntent().getAction();
            if (getIntent().hasCategory(Intent.CATEGORY_LAUNCHER) && Intent.ACTION_MAIN.equals(action)) {
                finish();
                return;
            }
 }
解决2:在finish前主动调用跳转,这样就可以收到了onNewIntent回调
        if (!this.isTaskRoot() && getIntent() != null) {
            String action = getIntent().getAction();
            if (getIntent().hasCategory(Intent.CATEGORY_LAUNCHER) && Intent.ACTION_MAIN.equals(action)) {
            	//startToLauncher跳转至想要去的界面
                startToLauncher();
                finish();
                return;
            }
        }

    private void startToLauncher() {
		Intent intent = getIntent();
        if (intent == null){
            intent = new Intent();
        }
        intent.setClass(SplashActivity.this, MainActivity.class);
        startActivity(intent);
    }

结果:通过调试,解决了混音问题,并完善了闪屏页面的启动方法。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值