在android中进行拨出电话时如何打开新显示?

时间:2015-11-10 07:19:06

标签: android phone-call

我正在尝试拨打电话时打开一个意图。但应用程序崩溃了。 我错过了什么或者这不能做到吗? 或者有没有办法在呼叫创建事件和接收者接收呼叫事件之间打开不同的屏幕(活动/片段)?

1 个答案:

答案 0 :(得分:2)

来自Android Developers Blog

  

收听拨出电话请求

     

提供电话呼叫服务的应用程序(例如VOIP或号码   管理)可以设置Intent过滤器来处理拨出呼叫   请求,例如Dialer或其他已安装的应用程序。   这为可以转换的用户提供了无缝集成   直接到呼叫服务,无需重拨或启动   另一个应用程序。

     

当用户发起呼叫时,系统会通过感兴趣的应用程序通知   发送NEW_OUTGOING_CALL意图的有序广播,   附加原始电话号码,URI和其他信息   临时演员。这为Google Voice等应用提供了机会   在将呼叫传递给系统之前修改,重新路由或取消呼叫   默认手机应用。

     

如果您希望手机通话应用能够处理拨出电话   请求,实现接收的广播接收器   NEW_OUTGOING_CALL意图,处理号码,并发起呼叫   如所须。确保为NEW_OUTGOING_CALL声明一个意图过滤器   在接收器中,让系统知道您的应用程序感兴趣   广播。您还需要申请PROCESS_OUTGOING_CALLS   获得意图的许可。

     

请注意,系统仅为数字广播NEW_OUTGOING_CALL   与核心拨号功能无关的功能   紧急电话号码。这意味着NEW_OUTGOING_CALL不能干涉   使用CALL_PRIVILEGED的方式访问紧急服务   威力。

     

这是在app的清单中声明的​​示例广播接收器   文件:

<manifest>
    <uses-permission android:name="android.permission.PROCESS_OUTGOING_CALLS" />  
    <application>
        ...
        <receiver android:name=MyOutgoingCallHandler">
            <intent-filter>
                <action android:name="android.intent.action.NEW_OUTGOING_CALL" />
                <category android:name="android.intent.category.DEFAULT" />
            </intent-filter>
        </receiver>
        ...
    </application>
</manifest>
     

相应的广播接收器的实现看起来   像这样的东西:

public class MyOutgoingCallHandler extends BroadcastReceiver {
  @Override
  public void onReceive(Context context, Intent intent) {
    // Extract phone number reformatted by previous receivers
    String phoneNumber = getResultData();
    if (phoneNumber == null) {
      // No reformatted number, use the original
      phoneNumber = intent.getStringExtra(Intent.EXTRA_PHONE_NUMBER);
    }
    // My app will bring up the call, so cancel the broadcast
    setResultData(null);
    // Start my app to bring up the call
    ...
  }
}
     

由于订购了NEW_OUTGOING_CALL广播,您的应用可以   选择是自己使用呼叫请求还是简单地处理   数字并将结果数据传递给其他可能的应用程序   感兴趣。在该示例中,广播接收器打开电话   调用它自己的服务并将结果数据设置为null。这个   阻止呼叫请求到达默认电话应用程序。