Permissions
<uses-permission android:name="android.permission.MODIFY_AUDIO_SETTINGS" />
<uses-permission android:name="android.permission.RECORD_AUDIO" /> (Optional)
Below is the code which is working well in the below Android 10 devices.
boolean isRunning;
public class PhoneListener extends PhoneStateListener {
public void onCallStateChanged(int state, String incomingNumber) {
Log.i(TAG, "CallRecorder PhoneListener::onCallStateChanged state:" + state + " incomingNumber:");
switch (state) {
case TelephonyManager.CALL_STATE_IDLE:
Log.i(TAG, "CALL_STATE_IDLE");
new Handler().postDelayed(new Runnable() {
@Override
public void run() {
if (!isPressedClose) {
if (moSharedPreferenceManager.isSpeakerOn()) {
AudioManager audioManager = (AudioManager) getSystemService(Context.AUDIO_SERVICE);
audioManager.setMode(AudioManager.MODE_NORMAL);
if (audioManager.isSpeakerphoneOn())
audioManager.setSpeakerphoneOn(fase);
}
isRunning = false;
handleRedial();
} else {
finish();
}
}
}, 3000);
break;
case TelephonyManager.CALL_STATE_RINGING:
Log.i(TAG, " CALL_STATE_RINGING");
break;
case TelephonyManager.CALL_STATE_OFFHOOK:
moSharedPreferenceManager.setResetCallOrAlert(true);
Log.i(TAG, "CALL_STATE_OFFHOOK");
if (moSharedPreferenceManager.isSpeakerOn()) {
new Thread() {
@Override
public void run() {
try {
while (!isRunning) {
isRunning = true;
sleep(1000);
//Activate loudspeaker
AudioManager audioManager = (AudioManager)
getSystemService(Context.AUDIO_SERVICE);
audioManager.setMode(AudioManager.MODE_IN_CALL);
audioManager.adjustVolume(AudioManager.ADJUST_RAISE, AudioManager.FLAG_PLAY_SOUND);
Log.i(TAG, "audioManager.isSpeakerphoneOn() : " + audioManager.isSpeakerphoneOn());
if (!audioManager.isSpeakerphoneOn())
audioManager.setSpeakerphoneOn(true);
break;
}
Log.i(TAG, "audioManager.isSpeakerphoneOn() running ");
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}.start();
}
break;
}
}
}
Tried when app in foreground, background and kill from background. not working in any scenario
I already checked the google developer site but there is no mention for android 10 restriction or something that not working. please advice if anyone have clue.