标签: speakerphone

Android以编程方式设置扬声器

我试图在服务中以编程方式设置扬声器,audiomanager.setSpeakerphoneOn(true)但似乎它不起作用,我不知道为什么.我应该做别的吗?

谢谢

audio android speakerphone

12
推荐指数
1
解决办法
1万
查看次数

使用AudioManager会干扰呼叫音频

我在BroadcastReceiver(电话状态监听器)中使用以下代码来启用免提电话:

final Handler mHandler = new Handler();
mHandler.postDelayed(new Runnable() {
    @Override
    public void run() {
        AudioManager audioManager = (AudioManager) mContext.getSystemService(Context.AUDIO_SERVICE);
        audioManager.setMode(AudioManager.MODE_IN_CALL);
        audioManager.setSpeakerphoneOn(true);
    }
}, 500);
Run Code Online (Sandbox Code Playgroud)

当通过我的应用程序启动新的拨出电话时会发生这种情况.当呼叫断开时,我关闭扬声器电话:

AudioManager audioManager = (AudioManager) context.getSystemService(Context.AUDIO_SERVICE);
audioManager.setMode(AudioManager.MODE_NORMAL);
audioManager.setSpeakerphoneOn(false);
Run Code Online (Sandbox Code Playgroud)

这一切似乎都很好......第一次.之后,我手机的音频流似乎被搞乱了.后续调用非常安静,即使是从我的应用程序代码外部调用(不触​​发上述设置).我可以随意看回来的音频,但我不确定是什么导致它返回.

关于我可能做错的任何想法?是否有我不知道的Android错误?如何避免为后续呼叫静音我的音频?

编辑:我正在测试Galaxy S4.

android speakerphone android-audiomanager

11
推荐指数
1
解决办法
1437
查看次数

按下按钮,在耳机和扬声器之间切换

我试图通过按钮在两者之间切换来播放扬声器和耳机的音频.问题是我试图默认音频从耳机播放,但没有任何结果.然后当我按下按钮切换到扬声器时,仍然没有音频播放.我正在播放本地原始文件.

我在Manifest中也有android.permission.MODIFY_AUDIO_SETTINGS.

这是我的代码:

@Override
public void onCreate(Bundle savedInstanceState)
{
    super.onCreate(savedInstanceState);

    context = getActivity().getBaseContext();

    am = (AudioManager) context.getSystemService(Context.AUDIO_SERVICE);

    am.setMode(AudioManager.MODE_IN_CALL);
    am.setSpeakerphoneOn(false);
    am.setBluetoothScoOn(true);
    speakerON = false;
}

@Override
public void onClick(View v)
{               
    switch (v.getId())
    {

        case R.id.buttonSpeaker:
            if(!speakerON)//speaker off
            {
                speakerON = true;
                am.setMode(AudioManager.MODE_NORMAL);
                am.setSpeakerphoneOn(true);
                am.setBluetoothScoOn(false); 
                speaker.setCompoundDrawablesWithIntrinsicBounds(android.R.drawable.ic_lock_silent_mode_off, 0, 0, 0);
            }
            else
            {
                speakerON = false;
                am.setMode(AudioManager.MODE_IN_CALL);
                am.setSpeakerphoneOn(false);
                am.setBluetoothScoOn(true);
                speaker.setCompoundDrawablesWithIntrinsicBounds(android.R.drawable.ic_lock_silent_mode, 0, 0, 0);
            }

            break;

    }
}
Run Code Online (Sandbox Code Playgroud)

以下是我设置MediaPlayer的方法:

mediaPlayer = MediaPlayer.create(getActivity().getBaseContext(), R.raw.test_message);
mediaPlayer.setAudioStreamType(AudioManager.STREAM_VOICE_CALL);
mediaPlayer.start();
Run Code Online (Sandbox Code Playgroud)

android button toggle speakerphone

9
推荐指数
1
解决办法
1万
查看次数

无论何时拨打电话,都要打开免提电话

我的要求是每当拨打电话时打开免提电话.我尝试了以下代码,但它无法正常工作.事实上,扬声器电话在通话中间打开,第二个电话来了!

package in.co.allsolutions;

import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.os.Bundle;
import android.telephony.TelephonyManager;
import android.util.Log;
//import android.view.View;
import android.widget.Toast;
import android.media.AudioManager;

public class MyTelephonyBroadcastReceiver extends BroadcastReceiver {

      @Override
      public void onReceive(Context context, Intent intent) {

            AudioManager audioManager = (AudioManager) context.getSystemService(Context.AUDIO_SERVICE);
            audioManager.setSpeakerphoneOn(true);
            Bundle extras = intent.getExtras();            
            if (extras != null) {

                  String state = extras.getString(TelephonyManager.EXTRA_STATE);
                  Log.i("AS", "Message Received. State = " + state + ", Mode = " + audioManager.getMode());
                  //audioManager.setMode(AudioManager.MODE_NORMAL);
                  //audioManager.setSpeakerphoneOn(true);
//                  if (state.equals("OFFHOOK"))
//                  {                  
                  //audioManager.setMode(AudioManager.MODE_CURRENT);
                  //audioManager.setSpeakerphoneOn(true);
                  //audioManager.setMode(AudioManager.MODE_IN_CALL);
                  //audioManager.setSpeakerphoneOn(true); …
Run Code Online (Sandbox Code Playgroud)

android speakerphone

6
推荐指数
2
解决办法
1万
查看次数

更改Android音频记录默认输入源

我目前正在编写一个应用程序,要求录制和实时处理音频数据.为此,我正在使用AudioRecord类.除了在我的主要测试设备(一个星系连接点)上录制音频的默认设置是从后置扬声器录制时,这一切都很好.我假设大多数手机默认录音源都是背部或底部麦克风,因为当你使用手机拨打电话时,你的嘴巴接近底部.

但是,我的应用程序要求我从手机正面的扬声器录制,所以我希望有人可以帮助我如何以编程方式更改AudioRecord输入源.我已经广泛搜索了这个问题的答案.

我考虑过的一些事情是:

  • 使用AudioManager类并打开扬声器电话,例如:

    AudioManager am = (AudioManager)getSystemService(Context.AUDIO_SERVICE);
    am.setSpeakerphoneOn(true);

  • 在我的AudioRecord对象的构造中更改AudioSource参数:

    AudioRecord ar = new AudioRecord(AudioSource.????, ..., ..., ..., ...);

  • 我发现API对于哪种AudioSource格式并不太具体,所以我想知道是否有其他人在这个问题上遇到了困难,并且可以指出我正确的方向.

    提前致谢,

    android speakerphone speaker audiorecord android-audiomanager

    5
    推荐指数
    1
    解决办法
    5025
    查看次数

    iOS pjsip 2.2扬声器开关失灵

    在通话期间,我尝试使用pjsip 2.2库将语音从内置扬声器切换到iOS设备上的扬声器.它返回TRUE表示成功,但物理上它不会改变声音目标.

    我使用下一个代码

    - (BOOL)setLoud:(BOOL)loud {
    if (loud) {
        @try {
    
            pjmedia_aud_dev_route route = PJMEDIA_AUD_DEV_ROUTE_LOUDSPEAKER;
    
            pj_status_t pj_status =   pjsua_snd_set_setting(PJMEDIA_AUD_DEV_CAP_OUTPUT_ROUTE,
                                                            &route, PJ_TRUE);
            if (pj_status == PJ_SUCCESS) {
              return YES;
            }
            else
            {
                return NO;
            }
    
        }
        @catch (NSException *exception) {
            return NO;
        }
    } else {
        @try {
            pjmedia_aud_dev_route route = PJMEDIA_AUD_DEV_ROUTE_EARPIECE;
    
            pj_status_t pj_status =   pjsua_snd_set_setting(PJMEDIA_AUD_DEV_CAP_OUTPUT_ROUTE,
                                                            &route, PJ_TRUE);
            if (pj_status == PJ_SUCCESS) {
                return YES;
            }
            else
            {
                return NO;
            }
        }
        @catch (NSException *exception) {
            return NO;
        }
    }
    } …
    Run Code Online (Sandbox Code Playgroud)

    voip speakerphone pjsip speaker

    4
    推荐指数
    1
    解决办法
    1444
    查看次数

    如何在通话期间打开扬声器

    我打电话时试着打开扬声器.我试过这段代码.注册新的电话听众.但这不起作用.它显示吐司信息,但扬声器仍然是静音(默认只有听筒).

    @Override
        public void onCallStateChanged(int state, String incomingNumber) {
            super.onCallStateChanged(state, incomingNumber);
            switch (state) {
                case TelephonyManager.CALL_STATE_OFFHOOK:
                    Log.i(LOG_TAG, "onCallStateChanged: CALL_STATE_OFFHOOK");
                    try {
                        Thread.sleep(10000);
                    } catch (InterruptedException e) {
                        e.printStackTrace();
                    }
    
                    Toast.makeText(mContext,"Call, time to turn speaker on",Toast.LENGTH_SHORT).show();
                    AudioManager audioManager = (AudioManager) mContext.getSystemService(Context.AUDIO_SERVICE);
                    audioManager.setSpeakerphoneOn(true);
                    break;
            }
        }
    
    Run Code Online (Sandbox Code Playgroud)

    当然我在AndroidManifest.xml中添加了permisions.

    <uses-permission android:name="android.permission.MODIFY_AUDIO_SETTINGS" />
    
    Run Code Online (Sandbox Code Playgroud)

    编辑

    这也不起作用.它返回false(Toast消息为false);

    case TelephonyManager.CALL_STATE_OFFHOOK:
                    Log.i(LOG_TAG, "onCallStateChanged: CALL_STATE_OFFHOOK");
                    try {
    
                        Thread.sleep(10000);
                    } catch (InterruptedException e) {
                        e.printStackTrace();
                    }
    
                         Toast.makeText(mContext,"Call, time to turn speaker on",Toast.LENGTH_SHORT).show();
                    audioManager = (AudioManager) mContext.getSystemService(Context.AUDIO_SERVICE);
                    ((Activity)mContext).setVolumeControlStream(AudioManager.STREAM_VOICE_CALL);
                    audioManager.setMode(AudioManager.MODE_IN_CALL);
                    audioManager.setSpeakerphoneOn(true);
                    boolean check …
    Run Code Online (Sandbox Code Playgroud)

    java audio android speakerphone

    4
    推荐指数
    1
    解决办法
    2044
    查看次数