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 SubJava 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 ifBest regards
 
				 
 
		 
 
		 
 
		 
 
		 
 
		 
 
		