2012-04-12 9 views
7

Próbuję rozpocząć intencję Skype z mojej aplikacji na Androida, podając numer telefonu. Jak dotąd, dzięki innym osobom, które reklamują podobne potrzeby na stackoverflow, udało mi się uruchomić skype, ale nadal nie mogę przekazać numeru telefonu. Jest to kod używam:Jak rozpocząć rozmowę Skype z poziomu aplikacji na Androida?

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); 

Co się dzieje jest to, że Skype uruchamia się, ale daje mi toast mówiąc, że numer nie jest ważny, i sugeruje mi, aby dodać prefiks międzynarodowy. Log.d daje mi tel: +39 ........ (numer działa, używam go również do

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); 
    } 

} 

W rzeczywistości, kiedy idę do Zdaniem Skype za rozmowy , Widzę, że został skomponowany +0 Tak więc wydaje mi się, że przekazuję numer telefonu w niewłaściwy sposób lub na niewłaściwą Aktywność .... jakakolwiek pomoc byłaby bardzo cenna! W międzyczasie Chcę tylko powiedzieć, że StackOverflow po prostu kołysze.

+0

To działa idealnie (dla mnie). Potrzebowałem sposobu na rozpoczęcie rozmowy przez Skype bez żadnej interwencji ze strony użytkownika. – user462990

+0

jak programowo wprowadzić poświadczenia na ekranie logowania Skype? Możliwe, że użytkownik nie jest zalogowany do aplikacji. –

Odpowiedz

16

Zobacz tę odpowiedź: https://stackoverflow.com/a/8844526/819355

Jeff proponuje użyciem skype:<user name> zamiast tel:<phone number>

Po pewnym podręczniki akademickie z apk skype z apktool, jak zasugerowano w tej odpowiedzi, ja przyszedłem z tym kodem, dla mnie to działa:

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

OK, dzięki, wydaje się właściwą drogą! Jutro postaram się zgłosić, jeśli działa :) – Daniele

+0

Jeśli odpowiedź była pomocna, zaznacz ją jako zaakceptowaną, aby inni mogli z niej korzystać, jeśli rozwiązałeś problem w inny sposób, możesz odpowiedzieć na własne pytanie i zaakceptować je – marmor

+0

Ta odpowiedź była pomocna, ale nie zawierała dokładnej procedury, czy powinienem napisać działający kod jako odpowiedź na moje pytanie lub edytować pytanie? – Daniele

3

Nie powinieneś włączać konkretnej klasy podczas dzwonienia do zewnętrznej aplikacji, pozwól użytkownikowi zdecydować o aplikacji, z której chce korzystać.Tak jest sposób, w jaki Android został zaprojektowany i jest lepsze rozwiązanie niż zobowiązanie ludzi do korzystania z miękkiej (w dodatku dość powolnej, zamkniętej i niewygodnej aplikacji do mojego umysłu).

Innymi słowy, po prostu użyj Uri, to jest zadanie skype zadeklarowania zdolności do przechwytywania takich intencji.

+1

Cześć, dziękuję za odpowiedź. Wiem, i już próbowałem wyjaśnić to mojemu klientowi, oczywiście, ale, niestety, tutaj jestem, próbując zrobić to ... – Daniele

+0

jak programowo wprowadzić poświadczenia na ekranie logowania Skype? Możliwe, że użytkownik nie jest zalogowany w aplikacji. –

6

Patrz Skype dewelopera: http://developer.skype.com/skype-uris/skype-uri-tutorial-android należy dodać także w adresie URL "zadzwonić?". E.g

intent.setData (Uri.parse ("skype:" + phoneNumber + "? Call"));

Bez tego Skype może nie wybrać numeru.

+0

jak programowo wprowadzić poświadczenia na ekranie logowania Skype? Być może użytkownik nie jest zalogowany do aplikacji –

+0

Nie odczuwałem żadnej różnicy bez części "? Call". Ponadto, "skype:" rzeczy działa tylko na nowoczesnym Skype dla mnie. Stare wyskakują z ekranu wybierania skype, ale nie nawiązują połączenia. Używanie nazw użytkowników zamiast telefonów sprawiło, że działa we wszystkich przypadkach. Problem z numerami za pomocą "skype:" stał się dla mnie nawet wtedy, gdy próbowałem uruchomić go z 'am start skype: phonenumber'. – erm3nda

Powiązane problemy