关于在 android 中检测传入和传出呼叫有很多问题,但它们都很旧,而且 android 不推荐使用有用的功能,并且 google play 拒绝我的应用程序,因为我正在使用它们。
为了检测拨出电话,我使用了:
<uses-permission android:name="android.permission.PROCESS_OUTGOING_CALLS" />
并且还听android.intent.action.NEW_OUTGOING_CALL
广播监听器。
根据谷歌文档(this https://developer.android.com/reference/android/content/Intent.html#ACTION_NEW_OUTGOING_CALL)我们应该使用CallRedirectionService
and CallScreeningService
。但这些服务可在 API 29+ 上运行。
那么有什么方法可以检测不弃用且不使用敏感权限的传入和传出呼叫呢?
如果有任何调用,我想关闭套接字连接,如果没有,则重新打开它。
您需要一个广播接收器ACTION_PHONE_STATE_CHANGED https://developer.android.com/reference/android/telephony/TelephonyManager#ACTION_PHONE_STATE_CHANGED每当电话状态从空闲、响铃、摘机发生变化时,这都会呼叫您收到的电话,因此您可以根据之前的值和新值检测这是否是传入/传出呼叫。
所需的许可是"android.permission.READ_PHONE_STATE"
但如果您也想收到EXTRA_INCOMING_NUMBER
在该广播中,您需要另一个许可:"android.permission.READ_CALL_LOG"
这是清单的接收者定义:
<receiver android:name="PhoneStateReceiver">
<intent-filter>
<action android:name="android.intent.action.PHONE_STATE"/>
</intent-filter>
</receiver>
代码是这样的:
public class PhoneStateReceiver extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
...
}
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)