Как узнать, активен ли звонок Skype на Android?

Хорошо, я декомпилировал манифест Skype, чтобы узнать, есть ли какие-либо службы или трансляции, запущенные во время разговора. Для входящих вызовов есть только несколько внутренних трансляций. Также существует только один приемник и одна служба.

Я отслеживал все запущенные службы с моим приложением, но SkypeMainService всегда работает, даже если не в вызове.

Также AudioMode не изменяется с помощью skype (но в соответствии с logcat-журналами, которые хотели бы разработчики, но они просто этого не делают), поэтому я не могу просто проверить, является ли это MODE_IN_CALL .

Есть ли у вас какие-либо рекомендации по поиску, если Skype в настоящее время работает и имеет активный вызов?

Благодаря!

/ Edit: Краткий обзор мероприятий и т. Д .:

 <activity android:name="com.skype.raider.Main"> <activity-alias android:name="com.skype.raider.ui.SplashScreenActivity" android:targetActivity="com.skype.raider.Main"> <receiver android:name="com.skype.MainReceiver" android:enabled="true" android:exported="false"> <action android:name="android.intent.action.BOOT_COMPLETED" /> <action android:name="android.intent.action.MEDIA_MOUNTED" /> <action android:name="android.intent.action.SEARCH" /> <action android:name="android.intent.action.CALL_PRIVILEGED" /> <action android:name="com.skype.raider.INCOMING_GSM_CALL" /> <action android:name="com.skype.raider.ON_GSM_CALL" /> <action android:name="com.skype.raider.intent.action.request_sync" /> </receiver> <service android:name="com.skype.MainService"> 

Solutions Collecting From Web of "Как узнать, активен ли звонок Skype на Android?"

Хорошо, я действительно надеялся, что кто-то предоставит полезный ответ. Тем не менее, я взял совет Рубена в комментарии и сделал этот метод:

 /** * Gets the current activity * * @param context * A context to use * @return The Activity name */ public static String getCurrentTopActivity(Context context) { ActivityManager mActivityManager = (ActivityManager) context.getSystemService(Context.ACTIVITY_SERVICE); List<ActivityManager.RunningTaskInfo> RunningTask = mActivityManager.getRunningTasks(1); ActivityManager.RunningTaskInfo ar = RunningTask.get(0); return ar.topActivity.getClassName().toString(); } 

Затем я проверяю, равен ли результат com.skype.raider.Main . Это также вернет true, если нет активного вызова Skype, но основное приложение открыто.

Спасибо за помощь, особенно Рувим!

Изменить: вам понадобится следующее разрешение в вашем манифесте

 <uses-permission android:name="android.permission.GET_TASKS"/> 

В тот день, когда Skype изменит все это (возможно, в этом обновлении, которое появится через 2 дня – до того, как вы закончите кодирование), ваш код может сломаться. Поэтому я не думаю, что он стоит того, чтобы что-то делать.

Извините, это может быть не «ответ», но я не думаю, что время, потраченное на это, того стоит.

Есть несколько вещей, которые вы можете сделать, чтобы увеличить свой шанс угадать:

1) Проверьте, работает ли приложение:

 ActivityManager activityManager = (ActivityManager) this.getSystemService( ACTIVITY_SERVICE ); List<RunningAppProcessInfo> procInfos = actvityManager.getRunningAppProcesses(); for(int i = 0; i < procInfos.size(); i++){ if(procInfos.get(i).processName.equals("com.android.browser")) { Toast.makeText(getApplicationContext(), "Browser is running", Toast.LENGTH_LONG).show(); } } 

2) Проверьте состояние телефона для обмена данными с помощью PhoneManager

3) и, наконец, проверить страницу разработчиков Skype для любого известного api