2011-11-25 126 views
2

我找不到文档:如何使用android.intent.action.CALL_PRIVILEGED和android.intent.action.NEW_OUTGOING_CALL?

android.intent.action.CALL_PRIVILEGED 

我看到它是用于例如csipsimple处理呼叫。

我想更好地了解如何使用它。例如: android.intent.action.CALL_PRIVILEGEDandroid.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> 

在AndroidManifest为我的项目。当一个呼叫从原生拨号器开始,我的活动就叫做但是,如果在的onResume我做getIntent()的getAction()的结果为空

编辑

我做了它的工作处理onNewIntent以及onCreate。 onResume接收一个没有动作的意图(由默认的onNewIntent处理程序发送,我想)。

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

我试图注册该活动仅ACTION_CALL并没有奏效

+0

http://stackoverflow.com/questions/2296905/which-activity-handles-intent-action-call-privileged可能你会发现这个答案有帮助 –

+0

这里的文档http://developer.android.com/ reference/android/Manifest.permission.html 说关于CALL_PRIVILEGED“允许应用程序呼叫任何电话号码,包括紧急电话号码,而无需通过拨号程序用户界面以供用户确认呼叫正在进行。” 你在找什么其他信息? –

+0

但这是关于许可而不是行为的权利?我正在寻找有关行动 – kingston

回答

9

意图与行动android.intent.action.CALL_PRIVILEGED当您使用以下方式从电话簿拨打电话被称为: 电话簿 - >联系人 - >长按电话号码 - >从下拉菜单中选择拨打电话。 下面的代码应该是发生在清单:

<activity> 
    <intent-filter> 
    <action android:name="android.intent.action.CALL_PRIVILEGED" /> 
    <category android:name="android.intent.category.DEFAULT" /> 
    </intent-filter> 
</activity> 

对于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> 

当添加该代码的体现,并尝试进行呼叫描述上面,你可以得到应用选配并以这种方式拦截电话并继续通过所选应用程序拨打电话。

至于android.intent.action.NEW_OUTGOING_CALL它BroadcastReceivers使用,当你想获得呼出通知。例如,如果你想对你应该把下面的鳕鱼的体现:

<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 
     .... 
     } 
} 

使用,这将你得到通知所有时候呼出happend。

这个项目的主要区别是第一个拦截意图和第二个只得到一个事情发生的结果。

+1

我将其设置为接受的答案,尽管它没有回答待定问题,但仅回答了第一个问题(在我编辑之前)。现在的问题仍然是:意向书是否记录在案?使用它是否便携?是否有一种更便携的方式来做同样的事情? – kingston

3

您不能使用该意图。它有一个特殊的保护级别,只允许选择的应用程序发布它。这里有更多的信息:http://code.google.com/p/android/issues/detail?id=10344这个意图和其他许多不适用于第三方应用程序,但您可以通过其他方式利用它们。

例如,您可以捕获它们。但是,如果您不小心,这将意味着不能使用默认Android拨号器应用程序启动任何呼叫,因为大多数人都使用此意图。如果你抓住它,你可以将它作为一个简单的ACTION_CALL意图转发,这将起作用。

3

它已经在Nikolay Nikiforchuk的回答中声明,但可能没有明确强调,不同之处在于,如果仅处理CALL_PRIVILEGED,则应用程序将列为启动呼叫的选项。所以在开始调用之前,框架会询问用户应该使用哪个应用程序来执行操作。

如果您只处理NEW_OUTGOING_CALL,框架将使用标准拨号器,但拨号号码将被传递给您的应用广播接收器,该接收器将有机会放弃呼叫并处理该呼叫或修改电话号码并将其传递给通过其他注册的接收器。

+0

似乎CALL_PRIVILEGED没有更多的支持。我测试了S8(OS 7.0)和One +(6.0)设备。但它总是只推出本地经销商的应用程序。 – CoDe

相关问题