2012-01-13 9 views
8

De acuerdo, decompilé el manifiesto de Skype para saber si hay Servicios o Transmisiones en ejecución durante una llamada. Existen solo algunas transmisiones internas para llamadas entrantes. También solo existe un receptor y un servicio.Cómo saber si hay una llamada de Skype actualmente activa en Android

He supervisado todos los servicios en ejecución con mi aplicación, pero SkypeMainService siempre se está ejecutando, incluso si no está en una llamada.

También AudioMode no es cambiado por skype (pero de acuerdo con los logcat-logs que el dev quería, pero simplemente no lo hacen), así que no puedo simplemente verificar si es MODE_IN_CALL.

¿Tiene alguna sugerencia sobre cómo averiguar si Skype se está ejecutando actualmente y tiene una llamada activa?

Gracias!

/editar: Una breve descripción de las actividades, etc.:

<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

no uso de Skype, pero si hay un * activo * llamo entonces no SkypeActivity (o como se llame) será la actividad de primer plano? Que obviamente se puede detectar a través de ActivityManager ... –

+0

Sí, ese fue mi primer pensamiento también, pero Skype en realidad solo tiene dos actividades declaradas: una actividad de pantalla de bienvenida y una actividad principal. MainActivity hace de todo, incluso manejando llamadas ... – Force

Respuesta

2

bien, realmente esperaba s alguien proporcionaría una respuesta útil. Sin embargo, tomé el consejo de Reuben en el comentario e hice este método:

/** 
* 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(); 
} 

Entonces comprobar si el resultado es igual com.skype.raider.Main. Esto también volverá verdadero si hay no llamada activa de Skype, pero la aplicación principal está abierta.

Gracias por toda la ayuda, especialmente Reuben!

Editar: Su necesitará el siguiente permiso en su manifiesto

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

No funciona para mí, utilicé este código en mi servicio en segundo plano. ¿Hay alguna sugerencia para eso? –

0

El día de Skype cambia nada de esto (podría estar en esa actualización que viene en 2 días a partir de ahora - antes de terminar de codificación) su código podría romperse Entonces no creo que valga la pena intentar algo de este tipo.

Lo siento, esta podría no ser una "respuesta", pero no creo que el tiempo invertido en esto lo valga.

+0

Estoy completamente consciente de eso. Sin embargo, pedí una solución para el software actual, no una solución a prueba de futuro. ¿Y a qué te refieres con la actualización? ¿Hay una actualización anunciada para ser lanzada dentro de los próximos dos días? – Force

-1

Hay algunas cosas que usted puede hacer para aumentar sus probabilidades de adivinar que:

1) Compruebe si la aplicación se está ejecutando:

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) Comprobar el estado del teléfono para el intercambio de datos utilizando el PhoneManager

3) y, finalmente, comprobar Skype developers page para cualquier API conocida

+0

No, como dije antes, no tiene sentido comprobar si el proceso de Skype se está ejecutando (** siempre se está ejecutando **) y además ** no hay API de Android ** en ese sitio. – Force

+0

También como escribí en la pregunta, el estado del teléfono no se cambia. – Force

Cuestiones relacionadas