telephony.listen,应用关闭时 phoneStateListener 不工作
telephony.listen , phoneStateListener not working when app is closed
此 PhoneStateListener 仅在应用程序为 API>28(P) 打开时才有效,但我想要 incoming/outgoing phone 号码,即使应用程序已关闭也能正常工作在 API<=28(P)。
如果在通话时应用程序处于打开状态,我将收到 phone 号码,否则号码将显示为空白。
if (Build.VERSION.SDK_INT <= Build.VERSION_CODES.P) {
phnNbr = intent?.getStringExtra(TelephonyManager.EXTRA_INCOMING_NUMBER).toString()
} else if (Build.VERSION.SDK_INT > Build.VERSION_CODES.P && Build.VERSION.SDK_INT <= Build.VERSION_CODES.R) {
val telephony =
context.getSystemService(Context.TELEPHONY_SERVICE) as TelephonyManager
telephony.listen(object : PhoneStateListener() {
override fun onCallStateChanged(state: Int, incomingNumber: String) {
super.onCallStateChanged(state, incomingNumber)
println("incomingNumber API>28: $incomingNumber")
phnNbr = incomingNumber
}
}, PhoneStateListener.LISTEN_CALL_STATE)
}
AndroidOS保护用户隐私免受恶意应用窃取用户信息是正常行为。但是,您可以通过使用 系统事件广播接收器 来解决此问题,以便收到传入 phone 呼叫的通知。 Here is a good example to follow. The example is not enough and applicable for current android API levels and you need to have a Foreground Service 接到电话后 运行 前台服务并执行您的代码。
我正在使用 onCallStateChanged,因为我从文档中了解到 getStringExtra(EXTRA_INCOMING_NUMBER)
在 SDK<= Android P 中已弃用。但令我惊讶的是,因为我有 READ_PHONE_NUMBERS & READ_CALL_LOG 权限,旧方法 getStringExtra(EXTRA_INCOMING_NUMBER)
对我有用,这也解决了操作 Sim 2 时的错误响应。只需确保处理对 BroadcastReceiver 的 fun onReceive
的多次调用。
此 PhoneStateListener 仅在应用程序为 API>28(P) 打开时才有效,但我想要 incoming/outgoing phone 号码,即使应用程序已关闭也能正常工作在 API<=28(P)。 如果在通话时应用程序处于打开状态,我将收到 phone 号码,否则号码将显示为空白。
if (Build.VERSION.SDK_INT <= Build.VERSION_CODES.P) {
phnNbr = intent?.getStringExtra(TelephonyManager.EXTRA_INCOMING_NUMBER).toString()
} else if (Build.VERSION.SDK_INT > Build.VERSION_CODES.P && Build.VERSION.SDK_INT <= Build.VERSION_CODES.R) {
val telephony =
context.getSystemService(Context.TELEPHONY_SERVICE) as TelephonyManager
telephony.listen(object : PhoneStateListener() {
override fun onCallStateChanged(state: Int, incomingNumber: String) {
super.onCallStateChanged(state, incomingNumber)
println("incomingNumber API>28: $incomingNumber")
phnNbr = incomingNumber
}
}, PhoneStateListener.LISTEN_CALL_STATE)
}
AndroidOS保护用户隐私免受恶意应用窃取用户信息是正常行为。但是,您可以通过使用 系统事件广播接收器 来解决此问题,以便收到传入 phone 呼叫的通知。 Here is a good example to follow. The example is not enough and applicable for current android API levels and you need to have a Foreground Service 接到电话后 运行 前台服务并执行您的代码。
我正在使用 onCallStateChanged,因为我从文档中了解到 getStringExtra(EXTRA_INCOMING_NUMBER)
在 SDK<= Android P 中已弃用。但令我惊讶的是,因为我有 READ_PHONE_NUMBERS & READ_CALL_LOG 权限,旧方法 getStringExtra(EXTRA_INCOMING_NUMBER)
对我有用,这也解决了操作 Sim 2 时的错误响应。只需确保处理对 BroadcastReceiver 的 fun onReceive
的多次调用。