如何使用android.intent.action.CALL_PRIVILEGED和android.intent.action.NEW_OUTGOING_CALL?
我找不到以下方面的文档:如何使用android.intent.action.CALL_PRIVILEGED和android.intent.action.NEW_OUTGOING_CALL?,android,android-intent,phone-call,Android,Android Intent,Phone Call,我找不到以下方面的文档: android.intent.action.CALL_PRIVILEGED 例如,我在csipsimple中看到它被用来处理调用 我想更好地了解如何使用它。例如:两者之间的关系是什么 android.intent.action.CALL\u PRIVILEGED和android.intent.action.NEW\u OUTGOING\u CALL 我补充说: <intent-filter> <action
android.intent.action.CALL_PRIVILEGED
例如,我在csipsimple中看到它被用来处理调用
我想更好地了解如何使用它。例如:两者之间的关系是什么
android.intent.action.CALL\u PRIVILEGED
和android.intent.action.NEW\u OUTGOING\u CALL
我补充说:
<intent-filter>
<action android:name="android.intent.action.CALL_PRIVILEGED" />
<category android:name="android.intent.category.DEFAULT" />
<data android:scheme="tel" />
</intent-filter>
在我的项目的AndroidManifest中。从本机拨号程序启动呼叫时,将调用我的活动,但如果在onResume中执行getIntent().getAction(),则结果为空
编辑
我使它能够处理onNewIntent和onCreate。onResume接收到一个没有操作的意图(我想是由默认的onNewIntent处理程序发送的)
问题是,为了检查操作是否为CALL_PRIVILEGED,我必须硬编码字符串“android.intent.action.CALL_PRIVILEGED”,因为操作CALL_PRIVILEGED是隐藏的
我尝试仅为ACTION\u CALL注册活动,但无法使用ACTIONandroid注册Intent。Intent.ACTION.CALL\u PRIVILEGED在您使用以下方式从电话簿拨打电话时被调用: 电话簿->联系人->长按电话号码->从下拉菜单中选择拨打电话。 以下代码应放在清单中:
<activity>
<intent-filter>
<action android:name="android.intent.action.CALL_PRIVILEGED" />
<category android:name="android.intent.category.DEFAULT" />
</intent-filter>
</activity>
<receiver android:name=".CallReceiver">
<intent-filter>
<action android:name="android.intent.action.NEW_OUTGOING_CALL" />
</intent-filter>
</receiver>
使用此功能,您将在传出呼叫发生时随时收到通知
主要区别在于,第一个截取意图和第二个截取意图的项目只能得到某件事情发生的结果。您不能使用该意图。它有一个特殊的保护级别,只允许选定的应用程序发布它。这里有更多信息:第三方应用程序无法使用该意图和其他许多意图,但您可以通过其他方式利用它们
例如,你可以抓住它们。但是如果你不小心的话,这将意味着默认的Android拨号应用程序不能启动任何电话,因为大多数人都是出于这个目的。如果你抓住了它,你可以将它作为一个简单的动作调用意图转发,这将起作用。Nikolay Nikiforchuk的回答中已经说明了这一点,但可能没有明确强调区别在于,如果你只处理特权调用,你的应用程序将被列为启动调用的选项。因此,在开始调用之前,框架将询问用户应该使用哪个应用程序来执行操作
如果您只处理新的呼出呼叫,框架将使用标准拨号器,但所拨打的号码将传递给您的应用程序广播接收器,该接收器将有机会放弃呼叫并进行处理,或修改电话号码,然后通过另一个注册接收器进行传递。您可能会找到此答案帮助此处的文档说明了CALL_PRIVILEGED“允许应用程序拨打任何电话号码,包括紧急电话号码,而无需通过拨号器用户界面让用户确认所拨打的电话。”您还需要什么其他信息?但这是关于权限而非操作权限的信息?我一直在寻找有关该行动的一些信息,所以现在我的解决方案正在发挥作用,但问题仍然悬而未决:是否有该行动的文档?有没有一种方法可以使用记录的操作执行相同的操作?请注意:您不需要CALL_PRIVILEGED权限来捕获CALL_PRIVILEGED action我将其设置为accepted answer,尽管它不回答挂起的问题,但只回答第一个问题(在编辑之前)。问题仍然是:这一意图是否有文件证明?使用它方便吗?有没有一种更方便的方法来做同样的事情?似乎没有更多的支持。我测试了S8(OS7.0)和One+(6.0)设备。但它总是只推出本地经销商应用程序。
<receiver android:name=".CallReceiver">
<intent-filter>
<action android:name="android.intent.action.NEW_OUTGOING_CALL" />
</intent-filter>
</receiver>
public class CallReceiver extends BroadcastReceiver{
private static final String TAG = "Call_Receiver";
@Override
public void onReceive(Context context, Intent intent) {
Bundle bundle = intent.getExtras();
//Notification there
....
}
}