2012-10-08 22 views
1

我正在通過Android應用撥打電話,並列出了一組能夠撥打電話的應用,用戶可以選擇一個撥打電話。但是我想知道的是,有沒有辦法將呼叫重定向至特定的第三方VOIP應用(如Cisco Jabber),而不是列出所有可撥打電話的應用**。我曾嘗試使用Android使用Telephony Manager從特定第三方Voip應用(如Cisco Jabber)撥打電話

註冊爲ACTION_NEW_OUT_GOING_CALLS使用廣播接收器來中斷呼出,但我不知道如何重定向以下是廣播接收器的代碼的呼叫。

public void onReceive(Context context, Intent intent) { 

    Bundle bundle = intent.getExtras(); 

    String phoneNumber = intent.getStringExtra(Intent.EXTRA_PHONE_NUMBER); 

    Log.d("Test", ""+phoneNumber); 

    TelephonyManager telephoneManager = (TelephonyManager) context.getSystemService(Context.TELEPHONY_SERVICE); 

    try { 
     Class<?> c = telephoneManager.getClass(); 
     Class className = Class.forName(c.getName()); 
     Log.d("Test", c.getSimpleName()); 
    } catch (ClassNotFoundException e) { 
     e.printStackTrace(); 
    } 

    List<ResolveInfo> callAppList = context.getPackageManager().queryIntentActivities(intent, 0); 

    Log.d("Test", ""+callAppList.size()); 
    if(callAppList.size() > 0) 
     Log.d("Test", callAppList.get(0).activityInfo.targetActivity); 

} 

回答

1

我可以想到幾個解決方案。

  1. 第三方是否提供API?你可以整合(如Skype的API)

  2. 如果第三方軟件有一個活動,可以接受你的電話,那麼你可以通過提供一個適當的意圖轉發該控制活動。

我不知道電話管理器可以捕獲有關VOIP呼叫的數據。我相信它的責任是專門針對電話本身的。我之前沒有和電話管理員一起工作過,所以我不知道。

+0

沒有第三方應用程序不提供任何API來進行交互! –

+0

然後你運氣不好。每方都將使用自己的協議和API來撥打電話。數據包可能在UDP/TCP中,並且提供者之間的連線格式本身差別很大。沒有任何通用接口可以將它們全部鏈接在一起,而無需向每個提供商應用正確的粘合劑。 編輯 - 我認爲jitsi最接近你想要做的。他們正在製作應用程序的Android端口,但還有一段路要走。如果該應用存在於Android上,您可以理論上要求jitsi處理您的電話。 https://jitsi.org/index.php/Documentation/FAQ#android –

+0

不,我們可以做到這一點,在Cisco Jabber應用程序中,如果他們可以這樣做,他們可以選擇通過Ciso jabber而不是本地撥號程序進行呼叫我們可以:)我們只需要找到辦法做我的朋友 –