2012-04-12 21 views
7

Sto provando ad avviare un intento di Skype dalla mia app per Android, passando un numero di telefono. Finora, grazie ad altre persone che hanno bisogno di simili qui su StackOverflow, sono riuscito a iniziare skype, ma ancora non riesco a passare il numero di telefono. Questo è il codice che sto utilizzando:Come avviare una chiamata Skype da un'app Android?

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

Quello che sta succedendo è che Skype si avvia, ma mi dà un brindisi dicendo che il numero non è valido, e mi suggerisce di aggiungere il prefisso internazionale. Il Log.d mi dà tel: +39 ........ (il numero funziona, lo sto usando anche per

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

} 

Infatti, quando vado al punto di vista della Skype per chiamare , Vedo che è stato composto +0 Quindi quello che mi sembra è che sto passando il numero di telefono nel modo sbagliato, o all'attività sbagliata .... qualsiasi aiuto sarebbe molto apprezzato! Nel frattempo, Voglio solo dire che StackOverflow semplicemente scuote.

+0

Questo funziona perfettamente (per me). Avevo bisogno di un modo per avviare una chiamata Skype senza alcun intervento da parte dell'utente. – user462990

+0

come inserire le credenziali per la schermata di login di Skype? Potrebbe essere possibile che l'utente non abbia effettuato il login nell'app –

risposta

16

Vedere questa risposta: https://stackoverflow.com/a/8844526/819355

Jeff suggerisce di utilizzare un skype:<user name> invece di tel:<phone number>

Dopo qualche studing della apk skype con apktool, come suggerito in quella risposta, mi si avvicinò con questo codice, per me sta funzionando:

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, grazie, sembra la strada giusta! Domani proverò a segnalare se funziona :) – Daniele

+0

Se la risposta è stata utile, contrassegnala come accettata in modo che altre persone possano usarla, se hai risolto il problema in un modo diverso, puoi rispondere alla tua domanda e accettarla – marmor

+0

Questa risposta è stata utile, ma non conteneva la procedura esatta, dovrei scrivere il codice funzionante come risposta alla mia domanda o modificare la domanda? – Daniele

3

Non dovresti includere una classe specifica quando chiami un'app esterna. Lascia che l'utente decida l'applicazione che lui/lei vuole usare. Questo è il modo in cui Android è stato progettato ed è una soluzione migliore di costringendo le persone a usare una app morbida (per di più abbastanza lenta, chiusa e scomoda nella mia mente).

In altre parole, basta usare l'Uri, questo è il lavoro di skype di dichiarare la sua capacità di catturare tali intenti.

+1

Ciao, grazie per la risposta. Lo so, e ho già provato a spiegarlo al mio cliente, ovviamente, ma, purtroppo, eccomi qui, cercando di fare questa cosa ... – Daniele

+0

come inserire le credenziali per la schermata di login di Skype? Potrebbe essere possibile che l'utente non abbia effettuato il login nell'app –

6

Fare riferimento a sviluppatori Skype: http://developer.skype.com/skype-uris/skype-uri-tutorial-android ricorda anche di aggiungere il vostro URL "chiamano?". E.g

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

In caso contrario, Skype non può comporre il numero.

+0

come inserire le credenziali per la schermata di accesso Skype al livello di programmazione? Potrebbe essere possibile che l'utente non abbia effettuato il login nell'app –

+0

Non ho sentito alcuna differenza senza la parte "? Call". Inoltre, il materiale "skype:" funziona solo su Skype moderno per me. Quelli vecchi si limitano a far apparire la schermata di composizione skype ma non hanno effettuato la chiamata. L'uso di nomi utente invece di telefoni ha funzionato in tutti i casi. Il problema con i numeri che usano "skype:" mi è successo anche quando provavo a lanciarlo da "am start skype: phonenumber'. – erm3nda

Problemi correlati