I am trying to create a Sub that will turn Speakerphone On/Off over all versions of Android. My code is based on what I have read on this forum as well as StackOverflow. This point may or may not be true, but it seems that the method using Reflector works with SDK 20 (KitKat 4.4) and below, while the JavaObject method is required for SDK 21 (Lollipop 5.0) and above. I made this assumption based the difficulties described by others.
It would be greatly appreciated if someone would review my code, and provide comment as to whether it is correct, or in need of some modification. I don’t have devices beyond SDK 20, so I don’t have the means of testing this fully. Any help greatly appreciated.
B4A Code
Java Code
Best regards
It would be greatly appreciated if someone would review my code, and provide comment as to whether it is correct, or in need of some modification. I don’t have devices beyond SDK 20, so I don’t have the means of testing this fully. Any help greatly appreciated.
B4A Code
B4X:
Sub SpeakerPhoneOnOff
'open/close speakerphone
Dim phone1 As Phone
Dim result As Int
result=phone1.sdkVersion
'Log("sdkVersion = " & result)
If result < 21 Then ' KitKat 4.4 and below
Dim rr As Reflector
rr.Target = rr.GetContext
rr.Target = rr.RunMethod2("getSystemService", "audio", "java.lang.String")
If SpkrPhoneOnFlag = False Then
SpkrPhoneOnFlag = True
'Log("SpkrPhoneOnFlag = " & SpkrPhoneOnFlag)
rr.RunMethod2("setSpeakerphoneOn", True, "java.lang.boolean") 'Turn on SpeakerPhone
ToastMessageShow("SPEAKER ON!!", False)
Else If SpkrPhoneOnFlag = True Then
SpkrPhoneOnFlag = False
'Log("SpkrPhoneOnFlag = " & SpkrPhoneOnFlag)
rr.RunMethod2("setSpeakerphoneOn", False, "java.lang.boolean") 'Turn off SpeakerPhone
ToastMessageShow("SPEAKER OFF!!", False)
End If
Else ' Lollipop 5.0 and above
Dim java As JavaObject
java.InitializeContext
If SpkrPhoneOnFlag = False Then
SpkrPhoneOnFlag = True
'Log("SpkrPhoneOnFlag = " & SpkrPhoneOnFlag)
java.RunMethod("setSpeakerOn", Null) 'Turn on SpeakerPhone
ToastMessageShow("SPEAKER ON!!", False)
Else If SpkrPhoneOnFlag = True Then
SpkrPhoneOnFlag = False
'Log("SpkrPhoneOnFlag = " & SpkrPhoneOnFlag)
java.RunMethod("setSpeakerOff", Null) 'Turn off SpeakerPhone
ToastMessageShow("SPEAKER OFF!!", False)
End If
End If
End Sub
Java Code
B4X:
#If JAVA
import android.media.AudioManager;
public void setSpeakerOn() {
AudioManager audioManager = (AudioManager) getSystemService(AUDIO_SERVICE);
audioManager.setMode(AudioManager.MODE_IN_CALL);
audioManager.setSpeakerphoneOn(true);
}
public void setSpeakerOff() {
AudioManager audioManager = (AudioManager) getSystemService(AUDIO_SERVICE);
audioManager.setMode(AudioManager.MODE_NORMAL);
audioManager.setSpeakerphoneOn(false);
}
#End if
Best regards