Created
October 24, 2023 10:08
-
-
Save ilyosdev/543b4de7c2931ca5f1cda8322bfe3492 to your computer and use it in GitHub Desktop.
kotlin incall play audio
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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