Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/180.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 在安卓API29+中检测来电和传出呼叫;_Android_Android Service_Android Permissions_Android Broadcast_Telephonymanager - Fatal编程技术网

Android 在安卓API29+中检测来电和传出呼叫;

Android 在安卓API29+中检测来电和传出呼叫;,android,android-service,android-permissions,android-broadcast,telephonymanager,Android,Android Service,Android Permissions,Android Broadcast,Telephonymanager,在安卓系统中,有很多关于检测来电和呼出电话的问题,但所有这些问题都很旧,安卓系统也不赞成使用这些有用的功能,谷歌play也拒绝使用我的应用程序,因为我正在使用它们 用于检测我使用的传出呼叫: <uses-permission android:name="android.permission.PROCESS_OUTGOING_CALLS" /> 还可以收听android.intent.action.NEW\u OUTGOING\u CALL广播侦听器 根据go

在安卓系统中,有很多关于检测来电和呼出电话的问题,但所有这些问题都很旧,安卓系统也不赞成使用这些有用的功能,谷歌play也拒绝使用我的应用程序,因为我正在使用它们

用于检测我使用的传出呼叫:

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

还可以收听android.intent.action.NEW\u OUTGOING\u CALL广播侦听器

根据google文档(),我们应该使用
CallRedirectionService
CallScreeningService
。但这些服务在API 29+上工作

那么,是否有任何方法可以检测不拒绝使用或不使用敏感权限的传入和传出呼叫


如果有任何呼叫,我想关闭我的套接字连接,如果没有,我想重新打开它。

您需要一个广播接收器 无论何时,只要手机状态从空闲、响铃、摘机状态更改,此功能都会呼叫您的received(已接收),因此您可以从以前的值和新的值中检测到这是否是传入/传出呼叫

所需的权限是“android.permission.READ\u PHONE\u STATE”

但如果您还想在该广播中接收
额外的\u传入\u号码
,则需要另一个权限:
“android.permission.READ\u CALL\u LOG”

以下是您清单的接收者定义:

<receiver android:name="PhoneStateReceiver"> 
     <intent-filter>
          <action android:name="android.intent.action.PHONE_STATE"/>    
     </intent-filter>
</receiver>
<uses-permission android:name="android.permission.READ_PHONE_STATE"/>

@马尔默的回答是正确的,我只想完成它

要首先读取电话状态,我们应将权限添加到清单中:

<receiver android:name="PhoneStateReceiver"> 
     <intent-filter>
          <action android:name="android.intent.action.PHONE_STATE"/>    
     </intent-filter>
</receiver>
<uses-permission android:name="android.permission.READ_PHONE_STATE"/>
额外费用的结果可能是:

响铃->如果您的手机正在响铃

摘机->如果您正在与某人通话(来电或呼出电话)

空闲->如果呼叫结束(传入或传出呼叫)


使用
PHONE\u STATE
broadcast,我们不需要使用
PROCESS\u outing\u CALLS
permission或弃用的
NEW\u outing\u CALL
操作。

根据我的说法,我不认为有办法检测没有敏感权限的呼叫。我最近开发了一个应用程序,我通过
android.permission.PROCESS\u OUTGOING\u CALLS
permission存档了这个应用程序,但最后谷歌拒绝了我的应用程序,因为它使用了
android.permission.PROCESS\u OUTGOING\u CALLS
更敏感的权限。他们希望有充分的理由使用这样的权限。外呼呢?这段代码同时检测传入和传出,如果状态更改为idle=>ringing,你知道这是一个传入呼叫,如果状态更改为idle=>offhook,你知道这是一个传出呼叫