2012-04-12 100 views
7

我試圖從我的Android應用程序開始Skype意圖,傳遞一個電話號碼。到目前爲止,由於其他人在這裏需要stackoverflow,我已經設法啓動Skype,但我仍然無法傳遞電話號碼。這是我使用的代碼:如何從Android應用程序啓動Skype通話?

Intent sky = new Intent("android.intent.action.CALL_PRIVILEGED"); 
     sky.setClassName("com.skype.raider", 
       "com.skype.raider.Main"); 
     sky.setData(Uri.parse("tel:" + number)); 
     Log.d("UTILS", "tel:" + number); 
     ctx.startActivity(sky); 

發生了什麼事是Skype的啓動,但給了我舉杯說,號碼無效,並建議我加國際前綴。 的Log.d給我電話:+39 ........(數量的作品,我用它也爲

public static void call(String number, Context ctx) { 
    try { 
     Intent callIntent = new Intent(Intent.ACTION_CALL); 
     callIntent.setData(Uri.parse("tel:" + number)); 
     ctx.startActivity(callIntent); 
    } catch (ActivityNotFoundException e) { 
     Log.e("helloandroid dialing example", "Call failed", e); 
    } 

} 

事實上,當我去到Skype的視圖調用,我看到它已經編寫+0 所以,我覺得我是通過錯誤的方式傳遞電話號碼,或錯誤的活動....任何幫助將非常感激! 在此期間,我只想說StackOverflow只是簡單的搖滾

+0

這工作完美(對我來說)。我需要一種無需用戶干預即可開始Skype通話的方式。 – user462990 2013-04-07 12:37:43

+0

如何以編程方式輸入Skype登錄屏幕的憑據?這可能是用戶沒有登錄到應用程序 – 2016-02-29 05:43:32

回答

16

看到這個答案:https://stackoverflow.com/a/8844526/819355

傑夫建議使用的skype:<user name>代替tel:<phone number>

與apktool Skype的APK的一些學習化後,如該答案的建議,我想出了這個代碼,我它的工作:

public static void skype(String number, Context ctx) { 
     try { 
      //Intent sky = new Intent("android.intent.action.CALL_PRIVILEGED"); 
      //the above line tries to create an intent for which the skype app doesn't supply public api 

       Intent sky = new Intent("android.intent.action.VIEW"); 
      sky.setData(Uri.parse("skype:" + number)); 
      Log.d("UTILS", "tel:" + number); 
      ctx.startActivity(sky); 
     } catch (ActivityNotFoundException e) { 
      Log.e("SKYPE CALL", "Skype failed", e); 
     } 

    } 
+0

好的,謝謝,似乎是正確的方法!明天我會嘗試並報告是否有效:) – Daniele 2012-06-26 18:22:48

+0

如果答案有幫助,請將其標記爲已接受,以便其他人可以使用它,如果以不同方式解決了問題,則可以回答自己的問題並接受它 – marmor 2012-06-29 08:56:37

+0

這個答案很有幫助,但沒有包含確切的程序,我應該寫作業代碼作爲我的問題的答案還是編輯問題? – Daniele 2012-07-23 08:08:58

3

在調用外部應用程序時,不應該包含特定的類讓用戶決定他/她想要使用的應用程序這就是android設計的方式,比起更好的解決方案要求人們使用軟(而且相當緩慢,封閉和不方便的應用程序在我心中)。

換句話說,只需使用Uri,這是宣稱其捕獲此類意圖的能力的Skype工作。

+1

嗨,謝謝你的答案。我知道,我已經試着向我的客戶解釋這一點,當然,但是,不幸的是,我在這裏,試圖做這件事... – Daniele 2012-04-13 08:33:43

+0

如何以編程方式輸入Skype登錄屏幕的憑據?有可能用戶沒有登錄到應用程序 – 2016-02-29 05:43:26

6

參考Skype開發商:http://developer.skype.com/skype-uris/skype-uri-tutorial-android 還記得添加在您的網址「打電話?」。例如

intent.setData(Uri.parse(「skype:」+ phoneNumber +「?call」));

沒有它,Skype可能不會撥打該號碼。

+0

如何以編程方式輸入Skype登錄屏幕的憑據?有可能用戶沒有登錄到應用程序 – 2016-02-12 02:30:15

+0

沒有「呼叫」部分,我感覺沒有區別。另外,「skype:」的內容僅適用於現代Skype。舊的只是彈出Skype的撥號屏幕,但沒有撥打電話。使用用戶名而不是電話使它在所有情況下都能正常工作。即使試圖從「skype:phonenumber」開始運行,使用「skype:」的數字也會出現問題。 – erm3nda 2017-11-24 02:15:48

相關問題