如何使用android.intent.action.CALL_PRIVILEGED和android.intent.action.NEW_OUTGOING_CALL?

kin*_*ton 3 android phone-call android-intent

我找不到以下文档:

android.intent.action.CALL_PRIVILEGED
Run Code Online (Sandbox Code Playgroud)

我看到它在csipsimple中用于处理调用.

我想更好地了解如何使用它.例如:android.intent.action.CALL_PRIVILEGED和之间的关系是 android.intent.action.NEW_OUTGOING_CALL什么?

我补充说:

         <intent-filter>
             <action android:name="android.intent.action.CALL_PRIVILEGED" />
             <category android:name="android.intent.category.DEFAULT" />
             <data android:scheme="tel" />
         </intent-filter>
Run Code Online (Sandbox Code Playgroud)

在我的项目的AndroidManifest中.当从本机拨号程序启动调用时,我的活动被调用,但如果在onResume中我执行getIntent().getAction(),则结果为null

编辑

我让它处理onNewIntent以及onCreate.onResume接收一个没有动作的意图(我猜想默认的onNewIntent处理程序发送).

问题是要检查操作是否为CALL_PRIVILEGED,我必须对字符串"android.intent.action.CALL_PRIVILEGED"进行硬编码,因为操作CALL_PRIVILEGED是隐藏的.

我试图仅为ACTION_CALL注册活动,但它不起作用

Nik*_*huk 11

意图与行动android.intent.action.CALL_PRIVILEGED当您使用以下方式从电话簿拨打电话叫:电话书本- >非接触>龙点击PHONENUMBER - >选择让从下拉菜单中调用.以下代码应放在Manifest中:

<activity>
  <intent-filter>
    <action android:name="android.intent.action.CALL_PRIVILEGED" />
    <category android:name="android.intent.category.DEFAULT" />
  </intent-filter>
</activity>
Run Code Online (Sandbox Code Playgroud)

对HTC来说有些变化:

<activity>
  <intent-filter>
    <action android:name="android.intent.action.CALL_PRIVILEGED" />
    <category android:name="android.intent.category.DEFAULT" />
    <data android:mimeType="vnd.android.cursor.item/phone" />
    <data android:mimeType="vnd.android.cursor.item/phone_v2" />
    <data android:mimeType="vnd.android.cursor.item/person" />
  </intent-filter>
</activity>
Run Code Online (Sandbox Code Playgroud)

当此代码添加到Manifest并且您尝试按上述方式进行调用时,您可以获取Application Chooser并以此方式拦截该调用并继续通过所选应用程序进行调用.

至于它在BroadcastReceivers中使用的android.intent.action.NEW_OUTGOING_CALL,当你想得到关于拨出电话的通知时.例如,如果你想要,你应该将以下鳕鱼放到Manifest:

<receiver android:name=".CallReceiver"> 
  <intent-filter> 
    <action android:name="android.intent.action.NEW_OUTGOING_CALL" /> 
  </intent-filter> 
</receiver>
Run Code Online (Sandbox Code Playgroud)

并创建:

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
        ....
        }
}
Run Code Online (Sandbox Code Playgroud)

使用此功能,您可以在拨打电话时始终收到通知.

这些项目之间的主要区别是,第一次拦截意图,第二项只能得到某些事情发生的结果.