2012-04-12 16 views
7

私はAndroid Appから電話番号を渡してSkypeのインテントを開始しようとしています。これまでのところ、スタックオーバーフローで類似のニーズを抱える他の人々のおかげで、私は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は私TEL与える:+39を........(数は動作しますが、私が呼び出すためのSkypeのビューに行くとき、私は、実際には

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

} 

のためにも、それを使用しています だから、私は間違ったやり方で電話番号を渡していると思うが...何か助けが非常に高く評価されるだろう! その間、

+0

これは完全に機能します(私にとって)。私はユーザーの介入なしにSkypeコールを開始する方法が必要でした。 – user462990

+0

Skypeログイン画面の認証情報をプログラムで入力するにはどうすればよいですか?ユーザーがアプリにログインしていない可能性があります。 –

答えて

16

この回答を参照してください:https://stackoverflow.com/a/8844526/819355

ジェフはapktoolとスカイプのapkのいくつか勉強した後skype:<user name>代わりのtel:<phone number>

を使用して、その答えで提案されているように、私は私のために、このコードを思い付いたことを示唆していますそれが働いている:

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

+0

答えが役に立ったら、それを他人が使用できるようにマークしてください。問題を別の方法で解決したら、あなた自身の質問に答えてそれを受け入れることができます – marmor

+0

この回答は役に立ちましたが、正確な手順が含まれていませんでした。私の質問への回答として作業コードを書いたり質問を編集したりする必要がありますか? – Daniele

3

外部アプリケーションを呼び出すときは、特定のクラスを含めないでください。ユーザーが使用したいアプリケーションを決定させるようにしてください。これがアンドロイドの設計方法です。より良い解決策人々にソフトを使用するように義務付けています(さらに、私の心にはかなり遅い、閉じた、不便なアプリ)。

つまり、Uriを使用するだけで、そのような意図をキャプチャする能力を宣言するskypeの仕事です。

+1

こんにちは、ありがとうございます。私は知っている、私はすでに私のクライアントにこれを説明しようとしたが、悲しいことに、ここで私は、このことをしようとしている... – Daniele

+0

どのようにプログラムでSkypeのログイン画面の資格情報を入力するのですか?ユーザーがアプリにログインしていない可能性があります –

6

をSkypeの開発者を参照してください:http://developer.skype.com/skype-uris/skype-uri-tutorial-android はまた、あなたのURLで "呼んで?" を追加することを忘れないでください。たとえば、Uri.parse( "skype:" + phoneNumber + "?call"));

Skypeがないと、番号をダイヤルできません。

+0

Skypeログイン画面の認証情報をプログラムで入力する方法は?ユーザーがアプリにログインしていない可能性があります。 –

+0

"?call"部分がないと違いは感じませんでした。また、「skype:」というものは現代のSkypeだけで動作しています。古いものはSkypeのダイヤル画面をポップアップさせますが、電話をかけませんでした。電話の代わりにユーザー名を使用すると、すべての場合に機能します。 "skype:am start skype:phonenumber"から実行しようとしているときでさえ、 "skype:"を使った数字の問題が私に起こります。 – erm3nda

関連する問題