Skip to content

Instantly share code, notes, and snippets.

@ilyosdev
Created October 24, 2023 10:08
Show Gist options
  • Save ilyosdev/543b4de7c2931ca5f1cda8322bfe3492 to your computer and use it in GitHub Desktop.
Save ilyosdev/543b4de7c2931ca5f1cda8322bfe3492 to your computer and use it in GitHub Desktop.
kotlin incall play audio
import android.content.Context
import android.media.AudioManager
import android.media.MediaPlayer
import android.net.Uri
import android.os.Bundle
import android.telecom.Call
import android.telecom.CallScreeningService
import android.telecom.TelecomManager
import androidx.appcompat.app.AppCompatActivity
class PhoneCallActivity : AppCompatActivity() {
private val phoneNumbers = listOf(
"tel:+1234567890",
"tel:+2345678901",
// Add more phone numbers as needed
)
private var currentIndex = 0
private var answeredCalls = 0
private var unansweredCalls = 0
private var turnedOffCalls = 0
private var notOnCalls = 0
private var mediaPlayer: MediaPlayer? = null
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_phone_call)
if (currentIndex < phoneNumbers.size) {
val phoneNumber = phoneNumbers[currentIndex]
val extras = Bundle()
extras.putBoolean(TelecomManager.EXTRA_START_CALL_WITH_SPEAKERPHONE, true)
val telecomManager = getSystemService(Context.TELECOM_SERVICE) as TelecomManager
val callDetails = telecomManager.placeCall(Uri.parse(phoneNumber), extras)
val call = callDetails?.call
call?.registerCallback(object : Call.Callback() {
override fun onStateChanged(call: Call, state: Int) {
super.onStateChanged(call, state)
when (state) {
Call.STATE_ACTIVE -> {
// Call is active, adjust audio settings to play on speaker
val audioManager = getSystemService(Context.AUDIO_SERVICE) as AudioManager
audioManager.mode = AudioManager.MODE_IN_CALL
audioManager.isSpeakerphoneOn = true
// Play audio file using MediaPlayer
val audioFileUri = "your_audio_file_uri_here"
mediaPlayer = MediaPlayer.create(this@PhoneCallActivity, Uri.parse(audioFileUri))
mediaPlayer?.isLooping = true
mediaPlayer?.start()
}
Call.STATE_DISCONNECTED -> {
// Call ended, move to the next phone number
mediaPlayer?.release()
mediaPlayer = null
when (call.details?.callDirection) {
Call.Details.DIRECTION_OUTGOING -> {
if (call.details?.disconnectCause?.code == CallScreeningService.REJECT_CALL_CODE) {
turnedOffCalls++
} else {
answeredCalls++
}
}
Call.Details.DIRECTION_INCOMING -> {
unansweredCalls++
}
}
currentIndex++
onCreate(savedInstanceState) // Initiate the next call
}
}
}
})
} else {
// All calls are made, generate the report
generateReport()
}
}
private fun generateReport() {
val report = """
Answered Calls: $answeredCalls
Unanswered Calls: $unansweredCalls
Turned Off Calls: $turnedOffCalls
Numbers Not On: $notOnCalls
""".trimIndent()
// Print or store the report as needed
println(report)
}
override fun onDestroy() {
super.onDestroy()
// Release MediaPlayer when the activity is destroyed
mediaPlayer?.release()
mediaPlayer = null
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment