Запуск Skype из программы Programmatically & Pass Number - Android
Попытка запустить и пройти tel. нет. сканировать по этому коду из моего приложения:
PackageManager packageManager = getPackageManager();
Intent skype = packageManager.getLaunchIntentForPackage("com.skype.raider");
skype.setData(Uri.parse("tel:65465446"));
startActivity(skype);
Skype запущен, но он не может уловить номер.
Ответы
Ответ 1
Этот код работает для меня, чтобы начать звонок между двумя пользователями Skype:
Intent sky = new Intent("android.intent.action.VIEW");
sky.setData(Uri.parse("skype:" + user_name));
startActivity(sky);
Чтобы найти это (и другие), используйте apktool, чтобы открыть APK Skype. Посмотрите на 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.
Фильтр намерений для tel: 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>
Итак, вы установили действие и задали намерение tel: URI и "правильная вещь". Что происходит, так это то, что Android находит правильного провайдера для tel: URI. Он может получить пользовательский ввод для выбора между телефоном и Skype. Приоритет для Skype для обработки tel: URI ноль, который является самым низким. Поэтому, если приложение "Телефон" установлено, оно, вероятно, получит намерение.
Ответ 2
Если вы хотите вызвать видеозвонок , вам нужно будет добавить "? 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
EDIT:
Прямой вызов 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>
Ответ 3
Используйте этот код для 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);
Ответ 4
С помощью этого кода вы намерены активировать деятельность Skype, а не активность вызывающего абонента. Таким образом, вам нужно найти намерение для активности, у которой есть фильтр намерений для действия CALL. Но более четко Skype использует действие android.intent.action.CALL_PRIVILEGED
, поэтому найдите этот фильтр.
Только для информации о том, что активность вызывающего абонента cmp=com.skype.raider.contactsync.ContactSkypeOutCallStartActivity
.
Ответ 5
Я обнаружил, что код выше не работает...
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-контакты
Больше информации будет больше всего приветствовать
Джон
Ответ 6
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.