Вот моя последняя попытка :
Код: Выделить всё
import android.Manifest
import android.content.Intent
import android.content.pm.PackageManager
import android.net.Uri
import android.os.Bundle
import androidx.activity.enableEdgeToEdge
import androidx.appcompat.app.AppCompatActivity
import androidx.core.app.ActivityCompat
import androidx.core.view.ViewCompat
import androidx.core.view.WindowInsetsCompat
import org.linphone.LinphoneApplication.Companion.corePreferences
import org.linphone.R
class ConfirmRedirectionActivity : AppCompatActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
enableEdgeToEdge()
setContentView(R.layout.activity_confirm_redirection)
ViewCompat.setOnApplyWindowInsetsListener(findViewById(R.id.main)) { v, insets ->
val systemBars = insets.getInsets(WindowInsetsCompat.Type.systemBars())
v.setPadding(systemBars.left, systemBars.top, systemBars.right, systemBars.bottom)
insets
}
findViewById(R.id.button).setOnClickListener { setupForwarding() }
}
fun setupForwarding() {
if (ActivityCompat.checkSelfPermission(
this,
Manifest.permission.CALL_PHONE
) != PackageManager.PERMISSION_GRANTED
) {
ActivityCompat.requestPermissions(
this,
arrayOf(Manifest.permission.CALL_PHONE),
CALL_PHONE_PERMISSION_REQUEST_CODE
)
return
}
startActivity(Intent(Intent.ACTION_CALL).apply {
val telNum = intent.getStringExtra("telIn") ?: ""
data = Uri.parse("tel:${Uri.encode("*21*$telNum#")}")
})
corePreferences.firstStart = false
// Go to dialer view
startActivity(
Intent(
this@ConfirmRedirectionActivity,
MainActivity::class.java
)
)
}
override fun onRequestPermissionsResult(
requestCode: Int,
permissions: Array,
grantResults: IntArray
) {
super.onRequestPermissionsResult(requestCode, permissions, grantResults)
if (requestCode == CALL_PHONE_PERMISSION_REQUEST_CODE) {
if (grantResults.isNotEmpty() && grantResults[0] == PackageManager.PERMISSION_GRANTED) {
setupForwarding()
} else {
// TODO: Handle permission denied
}
}
}
companion object {
private const val CALL_PHONE_PERMISSION_REQUEST_CODE = 100
}
}
p>
Я также пробовал использовать TelecomService.placeCall (он только осуществляет вызов, но не выполняет код mmi) и TelecomService.handleMmi (для этого требуется, чтобы вы были системным приложением для набора номера, которое Я нет)
Подробнее здесь: https://stackoverflow.com/questions/790 ... -mmi-codes