2012-01-13 2 views
8

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

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

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

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

Спасибо!

/редактирование: Краткий обзор деятельности и т.д.:

<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"> 
+1

Я не использую Skype, но если есть * активный * называют то не SkypeActivity (или как там это называется) быть переднего плана? Который, очевидно, может быть обнаружен с помощью ActivityManager ... –

+0

Да, это была моя первая мысль, но Skype действительно имеет только два вида активности: активность Splashscreen и основное действие. MainActivity делает все, даже обрабатывая звонки ... – Force

ответ

2

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

/** 
* 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, если есть no активный Skype-вызов, но основное приложение открыто.

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

Edit: Ваш будет необходимо следующее разрешение в манифесте

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

Его не работает для меня, я использовал этот код в своем фоновом сервисе. Есть ли какие-либо предложения для этого? –

0

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

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

+0

Я полностью это понимаю. Однако я попросил решение для текущего программного обеспечения, а не будущего решения. И что вы имеете в виду с обновлением? Объявлено ли обновление в течение следующих двух дней? – Force

-1

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

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 developers page для любого известного апи

+0

Нет, как я уже говорил, нет смысла проверять, работает ли процесс Skype (** он всегда работает **), а кроме того ** на этом сайте нет API-интерфейсов Android **. – Force

+0

Также, как я писал в вопросе, состояние телефона не изменяется. – Force

Смежные вопросы