7

AndroidアプリからSkypeインテントを開始し、電話番号を渡そうとしています。これまでのところ、stackoverflowで同様のニーズを抱えている他の人々のおかげで、私はなんとかスカイプを開始できましたが、それでも電話番号を渡すことができません。これは私が使用しているコードです:

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 ........を与えます(数は機能します、私はそれを次の目的にも使用しています

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は単純に揺らいでいると言いたいだけです。

4

4 に答える 4

17

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

Jeff は、skype:<user name>代わりにa を使用することを提案しています。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);
        }

    }
于 2012-06-21T08:16:56.257 に答える
7

Skype 開発者を参照してください: Skype URI チュートリアル: Android アプリ また、URL に「?call」を追加することを忘れないでください。例えば

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

これがないと、Skype は番号をダイヤルできない場合があります。

于 2014-04-05T01:12:32.717 に答える
4

外部アプリを呼び出すときは、特定のクラスを含めないでください。ユーザーが使用するアプリケーションを決定します。それはアンドロイドが設計された方法であり、人々にソフトを使用することを強いるよりも優れた解決策です (さらに、私の心には非常に遅く、閉鎖的で不便なアプリです)。

つまり、Uri を使用するだけです。これは、そのようなインテントをキャプチャする能力を宣言する Skype の仕事です。

于 2012-04-12T22:08:18.630 に答える
0

この Skype ドキュメント リンクを参照してください。Skype URI チュートリアル: Android アプリ

最初にSkypeがインストールされているか、使用していないかを確認する必要があります

/**
 * Determine whether the Skype for Android client is installed on this device.
 */
public boolean isSkypeClientInstalled(Context myContext) {
  PackageManager myPackageMgr = myContext.getPackageManager();
  try {
    myPackageMgr.getPackageInfo("com.skype.raider", PackageManager.GET_ACTIVITIES);
  }
  catch (PackageManager.NameNotFoundException e) {
    return (false);
  }
  return (true);
}

を使用してSkype URIを開始します

/**
 * Initiate the actions encoded in the specified URI.
 */
public void initiateSkypeUri(Context myContext, String mySkypeUri) {

  // Make sure the Skype for Android client is installed.
  if (!isSkypeClientInstalled(myContext)) {
    goToMarket(myContext);
    return;
  }

  // Create the Intent from our Skype URI.
  Uri skypeUri = Uri.parse(mySkypeUri);
  Intent myIntent = new Intent(Intent.ACTION_VIEW, skypeUri);

  // Restrict the Intent to being handled by the Skype for Android client only.
  myIntent.setComponent(new ComponentName("com.skype.raider", "com.skype.raider.Main"));
  myIntent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);

  // Initiate the Intent. It should never fail because you've already established the
  // presence of its handler (although there is an extremely minute window where that
  // handler can go away).
  myContext.startActivity(myIntent);

  return;
}

Skype がインストールされていない場合は、次を使用してマーケット プレイスにリダイレクトします。

/**
 * Install the Skype client through the market: URI scheme.
 */
public void goToMarket(Context myContext) {
  Uri marketUri = Uri.parse("market://details?id=com.skype.raider");
  Intent myIntent = new Intent(Intent.ACTION_VIEW, marketUri);
  myIntent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
  myContext.startActivity(myIntent);

  return;
}
于 2020-04-16T07:56:46.970 に答える