Подтвердить что ты не робот

Запуск 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 запущен, но он не может уловить номер.

4b9b3361

Ответ 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.