3

我正在开发一个 VoIP 应用程序。

My app registers to a SIP based back-end server using a User-ID and password.
Once the registration is successful, the user can make sip calls through this app.
If the user uses the native phone dialer to dial out a number, My app intercepts the call and places the call through SIP.
Once the call is intercepted, the native phone dialer goes to background and my app's 'call status' screen is displayed(my app comes to foreground).

我的要求如下:

一旦通话被截获,我们需要显示本地拨号器(默认电话拨号器)“通话状态”/“通话进度”屏幕(如三星手机的三星 Touchwiz、HTC 手机的 HTC Sense 等),而不是显示我的应用程序的 UI ,但通话应该通过我的应用程序(SIP)。我们的应用程序应该控制本机拨号器“呼叫状态”屏幕的所有功能。

例如:如果用户在本地拨号器的“通话状态”屏幕上点击“通话结束”按钮,我的应用程序应该结束通话。同样,本机拨号器的“呼叫状态”屏幕上的所有控件都应将控制权移交给我的应用程序以采取必要的措施。

请让我知道是否有可能实现这一点以及如何实施。

*public void onReceive(final Context context, Intent intent) {
    final String intentAction = intent.getAction();
    if (intentAction.equals(Intent.ACTION_NEW_OUTGOING_CALL)) {
        SharedPreferences getPrefs = PreferenceManager
                .getDefaultSharedPreferences(context);
        boolean bool_CustomFlag = getPrefs.getBoolean(
                "use_custom_dialer_preference", true);
        if (bool_CustomFlag == true) {
 setResultData(null);
    final String strPhoneNum = intent*
            .getStringExtra(Intent.EXTRA_PHONE_NUMBER);
    (new Thread() {
        public void run() {
            try {
Intent intent = new Intent(Intent.ACTION_CALL,Uri.fromParts("my_data_scheme",    
    Uri.decode(strPhoneNum),null));                                               
 intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
                context.startActivity(intent);

            } catch (Exception e) {
                e.printStackTrace();
            }
        }
    }).start();

} }*

我为我的拨出电话活动创建了自己的数据方案,以便 brodcastreciver 可以在通过本机拨号器拨打电话时收听 Action_outgoing_call 并启动我的拨出电话活动。

*<activity
        android:name=".OutgoingCallActivity"
        android:screenOrientation="portrait">
        <intent-filter >
            <action android:name="android.intent.action.CALL" />
            <category android:name= "android.intent.category.DEFAULT" />
            <data android:scheme = "sip" />
            <data android:scheme="my_data_scheme" />
        </intent-filter>
    </activity>*`
4

1 回答 1

0

抱歉,Android 没有任何 API 可以使用内置的调用状态屏幕执行您想要执行的操作。

唯一记录在案的方法是调出您自己的通话状态屏幕。很多 SIP 应用程序模拟内置的 android incall 状态屏幕,所以看起来还是一样的。

于 2014-03-02T04:21:24.763 回答