Запустите Skype из приложения программно и введите номер - Android
Пытаюсь запустить и передать тел. нет. Skype по этому коду из моего приложения:
PackageManager packageManager = getPackageManager();
Intent skype = packageManager.getLaunchIntentForPackage("com.skype.raider");
skype.setData(Uri.parse("tel:65465446"));
startActivity(skype);
Skype запущен, но не может поймать номер.
6 ответов
Этот код работает для меня, чтобы начать звонок между двумя пользователями 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 находит правильного провайдера для URI тел: Возможно, пользователь получит информацию о выборе между приложением Phone и Skype. Приоритет для Skype для обработки тел: URI нулевой, который является самым низким. Так что, если приложение Phone установлено, оно, вероятно, получит Intent.
Если вы хотите запустить видеозвонок, вам нужно добавить "? Call&video=true" в ваш URI Skype.
Intent skypeVideo = new Intent("android.intent.action.VIEW");
skypeVideo.setData(Uri.parse("skype:" + "<username>" + "?call&video=true"));
startActivity(skypeVideo);
Более подробную информацию о URI Skype можно найти по адресу: 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>
Используйте этот код для 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);
С помощью этого кода вы получите назначение активности Skype, а не действия вызывающего абонента. Таким образом, вы должны найти намерение для действия, которое имеет фильтр намерений для действия CALL. Но более четко скайп использует действие android.intent.action.CALL_PRIVILEGED
так что найдите по этому фильтру. Просто для информации, что активность вызывающего абонента cmp=com.skype.raider.contactsync.ContactSkypeOutCallStartActivity
,
Я обнаружил, что код выше не работает...
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. Более подробная информация будет очень кстати. Джон
В 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.