Android 无论何时拨打外线电话,都要打开扬声器
我的要求是,无论何时拨打外线电话,都要打开扬声器。我尝试了以下代码,但不起作用。事实上,当电话呼叫时,扬声器打开,第二个电话响起!p>Android 无论何时拨打外线电话,都要打开扬声器,android,speakerphone,Android,Speakerphone,我的要求是,无论何时拨打外线电话,都要打开扬声器。我尝试了以下代码,但不起作用。事实上,当电话呼叫时,扬声器打开,第二个电话响起!p> package in.co.allsolutions; import android.content.BroadcastReceiver; import android.content.Context; import android.content.Intent; import android.os.Bundle; import android.telepho
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);
//audioManager.setMode(AudioManager.MODE_RINGTONE);
//audioManager.setSpeakerphoneOn(true);
if (audioManager.isSpeakerphoneOn()) {
Log.i("AS", "Speaker on - SUCCESS.");
} else {
Log.i("AS", "Speaker could not be turned on.");
}
// }
} else {
Toast.makeText(context, "Message Received without any state", Toast.LENGTH_LONG).show();
}
}
}
谢谢。一个类似的问题被问到并回答了 我认为答案可能在项目的AndroidManifest.xml中。尝试添加:
uses-permission android:name="android.permission.MODIFY_AUDIO_SETTINGS"
添加到您的清单,这将允许您的应用程序修改设备的音频设置。您还需要将audioManager模式更改为通话中的模式:
audioManager.setMode(AudioManager.MODE_IN_CALL)
您可以通过以下编程方式进行设置:
AudioManager audioManager = (AudioManager)getApplicationContext().getSystemService(Context.AUDIO_SERVICE);
audioManager.setMode(AudioManager.MODE_IN_CALL);
audioManager.setSpeakerphoneOn(true);
但是,请记住,停止通话时不要忘记将扬声器关闭:
audioManager.setSpeakerphoneOn(false);
并且,在清单中设置权限:
<uses-permission android:name="android.permission.RECORD_AUDIO" />
<uses-permission android:name="android.permission.MODIFY_AUDIO_SETTINGS"/>
此代码对我来说运行良好。希望它对您有所帮助。我在这里发现了一个类似的问题,但也没有得到回答:。这是安卓系统中的一个bug吗?请看我的回答:谢谢。在Kitkat 4.4.2中,录制音频权限是不需要的,我不能说其他android版本。。