[FAQ19142]VOIP APK与普通电话交互导致普通电话无声

[DESCRIPTION]
 先进行What's APP通话,然后普通电话来电接听,再返回What's APP界面,普通电话无声,What's APP声音恢复
 正常来说普通电话应该比What's APP重要,普通电话时不应该允许恢复VOIP电话
 
 
 
[SOLUTION]
 
 在AudioService.java setMode()接口中增加相关判断,如果当前是普通电话模式时,则不允许切换到VOIP Mode
 具体Code修改如下:

public void setMode(int mode, IBinder cb) {

        if (DEBUG_MODE) { Log.v(TAG, "setMode(mode=" + mode + ")"); }

        if (!checkAudioSettingsPermission("setMode()")) {

            if (DEBUG_VOL) Log.e(TAG, "setMode: No permission!");

            return;

        }

       

        //AAAA Add begin

        if((mode == AudioSystem.MODE_IN_COMMUNICATION) && ( (mMode == AudioSystem.MODE_IN_CALL) || (mMode == AudioSystem.MODE_IN_CALL_2)))

        {

            Log.w(TAG, "MODIFY_PHONE_STATE Permission Denial: Current mode is in call");

            return;

        }

        //AAAA Add end

 

        if ( (mode == AudioSystem.MODE_IN_CALL) &&

                (mContext.checkCallingOrSelfPermission(

                        android.Manifest.permission.MODIFY_PHONE_STATE)

                            != PackageManager.PERMISSION_GRANTED)) {

            Log.w(TAG, "MODIFY_PHONE_STATE Permission Denial: setMode(MODE_IN_CALL) from pid="

                    + Binder.getCallingPid() + ", uid=" + Binder.getCallingUid());

            return;

        }

 

        if (mode < AudioSystem.MODE_CURRENT || mode >= AudioSystem.NUM_MODES) {

            if (DEBUG_VOL) Log.e(TAG, "setMode: Invalid mode!");

            return;

        }

 

    //#ifdef VENDOR_EDIT

    //Yujie.Wei@EXp.GeneralApp.audio. 2016/03/16, add for judge whether voip call

    Intent broadcast = new Intent("android.media.OPPO_VOIP");

    if(AudioManager.MODE_IN_COMMUNICATION == mode) {

                broadcast.putExtra("android.media.OPPO_VOIP_EXTRA", 1);

    }

    else{

                broadcast.putExtra("android.media.OPPO_VOIP_EXTRA", 0);

    }

    sendBroadcastToAll(broadcast);

    //#endif /* VENDOR_EDIT */

        int newModeOwnerPid = 0;

        synchronized(mSetModeDeathHandlers) {

            if (mode == AudioSystem.MODE_CURRENT) {

                mode = mMode;

            }

            newModeOwnerPid = setModeInt(mode, cb, Binder.getCallingPid());

        }

        // when entering RINGTONE, IN_CALL or IN_COMMUNICATION mode, clear all

        // SCO connections not started by the application changing the mode

        if (newModeOwnerPid != 0) {

             disconnectBluetoothSco(newModeOwnerPid);

        }

    }

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值