#Region Shared Files
#CustomBuildAction: folders ready, %WINDIR%\System32\Robocopy.exe,"..\..\Shared Files" "..\Files"
#End Region
Sub Class_Globals
Private Root As B4XView
Private xui As XUI
Private rp As RuntimePermissions
End Sub
Public Sub Initialize
B4XPages.GetManager.LogEvents = True
End Sub
Private Sub B4XPage_Created (Root1 As B4XView)
Root = Root1
Root.LoadLayout("MainPage")
RequestMicrophonePermission
End Sub
Private Sub Button1_Click
StartTesting
End Sub
Sub StartTesting
For x = 1 To 30
CheckIt
CheckMicrophoneUsageOldAndroid
CheckMicrophoneUsageDirect
CheckMicrophoneUsageDirectV2
Sleep(1000)
Log( (x) & "~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~")
Next
End Sub
Private Sub Button2_Click
Log("Bye")
ExitApplication
End Sub
Private Sub CheckIt
Dim AudioManager As JavaObject
AudioManager.InitializeContext
AudioManager = AudioManager.RunMethod("getSystemService", Array("audio"))
Dim Mode As Int = AudioManager.RunMethod("getMode", Null)
If Mode = 3 Or Mode = 2 Then
Log("CheckIT: Possibly mobile is aktive")
Else
Log("CheckIT: No activity detectable")
End If
End Sub
Private Sub CheckMicrophoneUsageOldAndroid
Try
Dim AudioRecord As JavaObject
Dim sampleRate As Int = 44100
Dim channelConfig As Int = 16
Dim audioFormat As Int = 2
Dim bufferSize As Int = AudioRecord.RunMethod("getMinBufferSize", Array(sampleRate, channelConfig, audioFormat))
AudioRecord = AudioRecord.InitializeNewInstance("android.media.AudioRecord", Array(1, sampleRate, channelConfig, audioFormat, bufferSize))
AudioRecord.RunMethod("startRecording", Null)
Dim state As Int = AudioRecord.RunMethod("getRecordingState", Null)
If state = 3 Then
Log("OldAndroid: The microphone is currently in use!")
Else
Log("OldAndroid: Microphone is not active.")
End If
AudioRecord.RunMethod("stop", Null)
AudioRecord.RunMethod("release", Null)
Catch
Log("OldAndroid: Error accessing the microphone. It could be used by another app.")
End Try
End Sub
Private Sub CheckMicrophoneUsage
Dim AudioManager As JavaObject
AudioManager.InitializeContext
AudioManager = AudioManager.RunMethod("getSystemService", Array("audio"))
Dim isRecording As Boolean = AudioManager.RunMethod("isRecording", Null)
If isRecording Then
Log("CheckMicrophoneUsage: The microphone is currently in use!")
Else
Log("CheckMicrophoneUsage: Microphone is not active.")
End If
End Sub
Private Sub CheckMicrophoneUsageDirect
Try
Dim AudioRecord As JavaObject
Dim sampleRate As Int = 44100
Dim channelConfig As Int = 16
Dim audioFormat As Int = 2
Dim bufferSize As Int = AudioRecord.RunMethod("getMinBufferSize", Array(sampleRate, channelConfig, audioFormat))
AudioRecord = AudioRecord.InitializeNewInstance("android.media.AudioRecord", Array(1, sampleRate, channelConfig, audioFormat, bufferSize))
AudioRecord.RunMethod("startRecording", Null)
Dim state As Int = AudioRecord.RunMethod("getRecordingState", Null)
If state = 3 Then
Log("Direct: Microphone is actively used.")
Else
Log("Direct: Microphone is not active.")
End If
AudioRecord.RunMethod("stop", Null)
AudioRecord.RunMethod("release", Null)
Catch
Log("Direct: Error accessing the microphone. It could be used by another app.")
End Try
End Sub
Private Sub CheckMicrophoneUsageDirectV2
Try
Dim AudioManager As JavaObject
AudioManager.InitializeContext
AudioManager = AudioManager.RunMethod("getSystemService", Array("audio"))
Dim Mode As Int = AudioManager.RunMethod("getMode", Null)
If Mode = 3 Or Mode = 2 Then
Log("DirectV2: Microphone is actively used (telephony or communication).")
Else
Log("DirectV2: Microphone is not actively used.")
End If
Catch
Log("DirectV2: Error when retrieving the microphone status.")
End Try
End Sub
Private Sub RequestMicrophonePermission
Log("Check authorisation...")
If rp.Check(rp.PERMISSION_RECORD_AUDIO) = False Then
rp.CheckAndRequest(rp.PERMISSION_RECORD_AUDIO)
Wait For Activity_PermissionResult (Permission As String, Result As Boolean)
If Result Then
Log("Mikrofon-Berechtigung wurde gewährt.")
Else
Log("Microphone authorisation was denied.")
End If
Else
Log("Microphone authorisation has already been granted.")
End If
End Sub