Запустите Skype из приложения программно и введите номер - Android - PullRequest
14 голосов
/ 20 июня 2011

Пытается запустить и передать тел.нет.Skype по этому коду из моего приложения:

PackageManager packageManager = getPackageManager();
Intent skype = packageManager.getLaunchIntentForPackage("com.skype.raider");
skype.setData(Uri.parse("tel:65465446"));
startActivity(skype);

Skype запущен, но не может поймать номер.

Ответы [ 6 ]

35 голосов
/ 13 января 2012

Этот код работает для меня, чтобы начать звонок между двумя пользователями Skype:

Intent sky = new Intent("android.intent.action.VIEW");
sky.setData(Uri.parse("skype:" + user_name));
startActivity(sky);

Чтобы найти это (и другие), используйте apktool, чтобы открыть Skype APK. Посмотрите на AndroidManifest.xml, и вы увидите все фильтры намерений, о которых они знают. Если вы хотите запустить один из этих фильтров намерений, вам нужно создать намерение, которое будет соответствовать одному. Вот фильтр намерений, который соответствует приведенному выше коду:

        <intent-filter>
            <action android:name="android.intent.action.VIEW" />
            <category android:name="android.intent.category.DEFAULT" />
            <data android:scheme="skype" />
        </intent-filter>

Вы получаете категорию "android.intent.category.DEFAULT" бесплатно от {{new Intent ()}}, так что остается только установить действие и URI.

Фильтр намерений для тел: URI выглядит следующим образом:

        <intent-filter android:icon="@drawable/skype_blue" android:priority="0">
            <action android:name="android.intent.action.CALL_PRIVILEGED" />
            <category android:name="android.intent.category.DEFAULT" />
            <data android:scheme="tel" />
        </intent-filter>

Итак, вы приступили к действию и даете Intent тел: URI и «происходит то, что нужно». Что происходит, так это то, что Android находит правильного поставщика для tel: URI. Это может заставить пользователя выбирать между приложением для телефона и Skype. Приоритет для Skype для обработки тел: URI нулевой, который является самым низким. Поэтому, если приложение Phone установлено, оно, вероятно, получит Intent.

17 голосов
/ 07 октября 2012

Если вы хотите запустить видеозвонок , вам нужно добавить «? Call & video = true» в ваш Skype URI.

Intent skypeVideo = new Intent("android.intent.action.VIEW");
skypeVideo.setData(Uri.parse("skype:" + "<username>" + "?call&video=true"));
startActivity(skypeVideo);

Более подробную информацию о Skype URI можно найти по адресу: http://developer.skype.com/skype-uris-program/skype-uri-ref

РЕДАКТИРОВАТЬ:

Прямой вызов Skype без намеренного выбора:

Если вы хотите прямой вызов Skype без выбора намерения, добавьте эти строки в файл манифеста ...

               <intent-filter
                    android:icon="@drawable/skype"
                    android:priority="0" >
                    <action android:name="android.intent.action.CALL_PRIVILEGED" />

                    <category android:name="android.intent.category.DEFAULT" />

                    <data android:scheme="tel" />
                </intent-filter>
                <intent-filter>
                    <intent-filter
                        android:icon="@drawable/skype"
                        android:priority="0" >
                        <action android:name="android.intent.action.VIEW" />
                        <action android:name="android.intent.action.CALL" />

                        <category android:name="android.intent.category.BROWSABLE" />
                        <category android:name="android.intent.category.DEFAULT" />

                        <data android:scheme="skype" />
                    </intent-filter>


                </intent-filter>
4 голосов
/ 26 августа 2012

Используйте этот код для Skype версии 2:

Intent skype_intent = new Intent("android.intent.action.VIEW");
skype_intent.setClassName("com.skype.raider", "com.skype.raider.Main");
skype_intent.setData(Uri.parse("skype:skypeusername"));
startActivity(skype_intent);
1 голос
/ 20 июня 2011

С помощью этого кода вы получите назначение активности Skype, а не действия вызывающего абонента.Таким образом, вы должны найти намерение для действия, которое имеет фильтр намерений для действия CALL.Но более четко Skype использует действие android.intent.action.CALL_PRIVILEGED, поэтому найдите по этому фильтру.Просто для информации, что активность вызывающего абонента cmp=com.skype.raider.contactsync.ContactSkypeOutCallStartActivity.

0 голосов
/ 20 сентября 2011

В Skype 2.X значительно отличается манифест, чем в Skype 1.X. Там нет ContactSkypeOutCallStartActivity. Новый манифест содержит код:

<activity android:name="com.skype.raider.Main" android:launchMode="singleTask"  android:configChanges="keyboardHidden|orientation" android:windowSoftInputMode="adjustResize">
...
  <intent-filter android:icon="@drawable/skype_blue" android:priority="0">
     <action android:name="android.intent.action.CALL_PRIVILEGED" />
     <category android:name="android.intent.category.DEFAULT" />
     <data android:scheme="tel" />
  </intent-filter>
...
</activity>

Итак, вы должны написать:

Intent skype_intent = new Intent("android.intent.action.CALL_PRIVILEGED");
skype_intent.setClassName("com.skype.raider", "com.skype.raider.Main");
skype_intent.setData(Uri.parse("tel:65465446")); 
context.startActivity(skype_intent);

Обратите внимание, что этот метод не позволяет вам начать вызов / чат с помощью Skype. Работает только со Skype Out.

0 голосов
/ 13 августа 2011

Я обнаружил, что приведенный выше код не работает ...

Intent i = packageManager.getLaunchIntentForPackage("com.skype.raider");
// i.setAction("android.intent.cation.CALL_PRIVILEGED");
// i.setClassName("com.skype.raider", "com.skype.raider.contactsync.ContactSkypeOutCallStartActivity");
// i.setData(Uri.parse("tel:5551234")); 
startActivity(i);

Закомментированные строки либо перестали работать, либо ничего не сделали!

Приведенный код вызовет Skypeи перейдите на страницу, где вы можете выбрать контакты Skype. Более подробная информация будет приветствоваться John

...