在Android API29+中检测来电和去电

人气:924 发布:2022-10-16 标签: android android-permissions telephonymanager android-broadcast android-service

问题描述

在Android中检测来电和呼出电话有很多问题,但这些问题都很旧,而且Android不支持有用的功能,Google Play拒绝我的应用程序,因为我正在使用它们。

用于检测我使用的去电:

<uses-permission android:name="android.permission.PROCESS_OUTGOING_CALLS" />

并收听android.intent.action.NEW_OUTGOING_CALL广播监听程序。

根据Google文档(this),我们应该使用CallRedirectionServiceCallScreeningService。但这些服务可以在API 29+上运行。

那么有什么方法可以检测不建议使用且不使用敏感权限的传入和传出呼叫?

如果有任何调用,我想关闭套接字连接,如果没有,则重新打开它。

推荐答案

您需要ACTION_PHONE_STATE_CHANGED的BroadCastReceiver 只要电话状态从空闲、振铃、摘机变为以前的值和您可以检测这是来电/去电的新值,这就会呼叫您的已接收。

所需权限为"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) {
        ...
    }
}

206