Domanda

Ok, ho decompilato il manifest di Skype per scoprire se ci sono servizi o trasmissioni in esecuzione durante una chiamata. Ci sono solo alcune trasmissioni interne per le chiamate in arrivo. Inoltre esistono solo un ricevitore e un servizio.

Ho monitorato tutti i servizi di esecuzione con la mia app, ma SkypeMainservice è sempre in esecuzione, anche se non in una chiamata.

Anche AudioMode non è cambiato da Skype (ma secondo i logcat-logs lo Dev voleva, ma non lo fanno), quindi non posso semplicemente controllare se lo è MODE_IN_CALL.

Hai qualche suggerimento su come scoprirlo, se Skype è attualmente in esecuzione e hai una chiamata attiva?

Grazie!

/Modifica: una breve panoramica delle attività ecc:

<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">
È stato utile?

Soluzione

Ok, speravo davvero che qualcuno avrebbe fornito una risposta utile. Tuttavia, ho raccolto il consiglio di Reuben nel commento e ho fatto questo metodo:

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

Quindi controllo se il risultato è uguale com.skype.raider.Main. Questo restituirà anche vero se esiste No Chiamata Skype attiva, ma l'app principale è aperta.

Grazie per tutto l'aiuto, in particolare Reuben!

Modificare: Avrai bisogno della seguente autorizzazione nel tuo manifest

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

Altri suggerimenti

Il giorno in cui Skype cambia tutto questo (potrebbe essere in quell'aggiornamento che arriverà tra 2 giorni - prima di finire la codifica) il codice potrebbe rompersi. Quindi non penso che valga la pena tentare nulla del genere.

Mi dispiace, questa potrebbe non essere una "risposta", ma non credo che il tempo investito ne valga la pena.

Ci sono alcune cose che puoi fare per aumentare le tue possibilità di indovinarlo:

1) Controllare se l'applicazione è in esecuzione:

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) Controllare lo stato del telefono per lo scambio di dati utilizzando il Phonemanager

3) e infine controlla Skype Pagina degli sviluppatori Per qualsiasi API conosciuta

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top