Pregunta

De acuerdo, descompilé el manifiesto de Skype para averiguar si hay algún servicio o transmisión que se ejecute durante una llamada. Solo hay unas pocas transmisiones internas para llamadas entrantes. También existe solo un receptor y un servicio.

Monitoricé todos los servicios en ejecución con mi aplicación, pero el SkyPemainservice siempre se está ejecutando, incluso si no en una llamada.

También AudioMode Skype no cambia (pero de acuerdo con logCat-Logs, el desarrollador quería, pero simplemente no lo hacen), por lo que no puedo simplemente verificar si es así 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">
¿Fue útil?

Solución

Bien, realmente esperaba que alguien proporcionara una respuesta útil. Sin embargo, recogí 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 verifico si el resultado es igual a com.skype.raider.Main. Esto también devolverá cierto si hay no Llamada activa de Skype, pero la aplicación principal está abierta.

¡Gracias por toda la ayuda, especialmente Reuben!

Editar: Su voluntad necesitará el siguiente permiso en su manifiesto

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

Otros consejos

El día en que Skype cambia cualquiera de esto (podría estar en esa actualización que vendrá dentro de 2 días, antes de terminar de codificar) su código podría romperse. Así que no creo que valga la pena intentar nada de este tipo.

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

Hay algunas cosas que puede hacer para aumentar sus posibilidades de adivinarlo:

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) Verifique el estado del teléfono para obtener datos utilizando el Fonementa

3) y finalmente verifique Skype página de desarrolladores Para cualquier API conocida

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top