Android не определяет правильное действие намерения
Я пишу приложение для Android (kotlin), которое регистрирует входящие и исходящие звонки (информация о номере телефона и дате). Пока что по входящим звонкам могу узнать номер телефона, а по исходящим не получил.
Я просмотрел руководства, и все они предлагают проверить действие намерения, а затем получить номер, по которому я пытаюсь позвонить.
в файле манифеста я добавил разрешения и получателя
<uses-permission android:name="android.permission.READ_PHONE_STATE" />
<uses-permission android:name="android.permission.PROCESS_OUTGOING_CALLS" />
<receiver android:name=".PhoneStateReceiver">
<intent-filter>
<action android:name="android.intent.action.PHONE_STATE" />
</intent-filter>
<intent-filter>
<action android:name="android.intent.action.NEW_OUTGOING_CALL" />
</intent-filter>
</receiver>
в PhoneStateReceiver я пытаюсь получить номера телефонов
class PhoneStateReceiver : BroadcastReceiver() {
private val TAG = "PhoneStateReceiver"
private var lastState = TelephonyManager.CALL_STATE_IDLE
override fun onReceive(context: Context?, intent: Intent?) {
checkCall(intent)
}
private fun checkCall(intent: Intent?) {
val state = intent?.getStringExtra(TelephonyManager.EXTRA_STATE)
if (intent?.action.equals(Intent.ACTION_NEW_OUTGOING_CALL)) {
var number = intent?.getStringExtra(Intent.EXTRA_PHONE_NUMBER)
Log.d(TAG, "Outgoing number : $number")
}else {
if (lastState == TelephonyManager.CALL_STATE_IDLE) {
if (state.equals(TelephonyManager.EXTRA_STATE_RINGING)) {
val number = intent?.getStringExtra(TelephonyManager.EXTRA_INCOMING_NUMBER)
Log.d(TAG, "Incoming number : $number")
}
}
}
Log.d(TAG, state)
lastState = intState(state)
}
а в MainActivity я прошу только разрешения:
class MainActivity : AppCompatActivity() {
private var PERMISSION_ALL = 1
private var PERMISSIONS = arrayOf(
Manifest.permission.READ_PHONE_STATE,
Manifest.permission.PROCESS_OUTGOING_CALLS
)
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
if(!hasPermissions(this, Manifest.permission.READ_PHONE_STATE, Manifest.permission.PROCESS_OUTGOING_CALLS)){
ActivityCompat.requestPermissions(this, PERMISSIONS, PERMISSION_ALL);
}
}
private fun hasPermissions(context: Context, vararg permissions: String): Boolean = permissions.all {
ActivityCompat.checkSelfPermission(context, it) == PackageManager.PERMISSION_GRANTED
}
}
Действие при исходящем вызове должно быть Intent.ACTION_NEW_OUTGOING_CALL Однако, когда я делаю исходящий вызов, это действие выглядит как Intent.PHONE_STATE
Почему это так и как это исправить?
1 ответ
Добавьте оба действия в одно intent-filter
<receiver android:name=".PhoneStateReceiver">
<intent-filter>
<action android:name="android.intent.action.PHONE_STATE" />
<action android:name="android.intent.action.NEW_OUTGOING_CALL" />
</intent-filter>
</receiver>