Orc*_*say 14 android telephony telephonymanager android-12
当我的应用程序位于前台时,我想监听是否有电话来电。
以前是这样的,但现在不推荐使用listen():
val tm = context.getSystemService(Context.TELEPHONY_SERVICE) as TelephonyManager
tm.listen(object : PhoneStateListener() {
override fun onCallStateChanged(state: Int, phoneNumber: String?) {
super.onCallStateChanged(state, phoneNumber)
when (state) {
TelephonyManager.CALL_STATE_RINGING -> transcribingAudioConsumer.stopTranscription(null)
else -> {}
}
}
}, PhoneStateListener.LISTEN_CALL_STATE)
Run Code Online (Sandbox Code Playgroud)
我尝试过类似的方法,但找不到正确的方法来实现它。
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.S) {
tm.registerTelephonyCallback({ it.run() }, MyPhoneStateListener())
}
Run Code Online (Sandbox Code Playgroud)
@RequiresApi(Build.VERSION_CODES.S)
class MyPhoneStateListener : TelephonyCallback(), TelephonyCallback.CallStateListener {
override fun onCallStateChanged(state: Int) {
when (state) {
TelephonyManager.CALL_STATE_RINGING -> {
Timber.e("omg RING")
}
TelephonyManager.CALL_STATE_OFFHOOK -> {
Timber.e("omg hook")
}
TelephonyManager.CALL_STATE_IDLE -> {
Timber.e("omg idle")
}
}
}
}
Run Code Online (Sandbox Code Playgroud)
xdb*_*bas 15
由于从 api 31 android 12 开始,listen 方法已被弃用,因此我采用了一种简单的方法来监听电话回调。
val telephonyManager: TelephonyManager =
context.getSystemService(Context.TELEPHONY_SERVICE) as TelephonyManager
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.S) {
telephonyManager.registerTelephonyCallback(
context.mainExecutor,
object : TelephonyCallback(), TelephonyCallback.CallStateListener {
override fun onCallStateChanged(state: Int) {
}
})
} else {
telephonyManager.listen(object : PhoneStateListener() {
override fun onCallStateChanged(state: Int, phoneNumber: String?) {
}
}, PhoneStateListener.LISTEN_CALL_STATE)
}
Run Code Online (Sandbox Code Playgroud)
请注意,新回拨不包含电话号码。至少对于广播接收者来说,可以通过以下方式检索电话号码
intent.extras.getString("incoming_number")
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
18662 次 |
| 最近记录: |