Frage

Okay, ich habe das Manifest von Skype abgebrochen, um herauszufinden, ob während eines Anrufs Dienste oder Sendungen ausgeführt werden. Es gibt nur wenige interne Sendungen für eingehende Anrufe. Auch gibt es nur ein Empfänger und ein Dienst.

Ich habe alle laufenden Dienste mit meiner App überwacht, aber der Skypemainservice läuft immer, auch wenn nicht in einem Anruf.

Ebenfalls AudioMode wird nicht durch Skype geändert (aber laut den Logcat-Logs, der der Entwickler wollte, aber sie tun es einfach nicht), daher kann ich nicht einfach überprüfen, ob es ist MODE_IN_CALL.

Haben Sie Vorschläge, wie Sie es herausfinden können, wenn Skype derzeit ausgeführt wird und einen aktiven Anruf hat?

Vielen Dank!

/bearbeiten: Ein kurzer Überblick über die Aktivitäten usw.:

<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">
War es hilfreich?

Lösung

Okay, ich hoffte wirklich, dass jemand eine nützliche Antwort geben würde. Ich habe jedoch Reubens Rat in den Kommentar aufgenommen und diese Methode gemacht:

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

Dann überprüfe ich, ob das Ergebnis gleich com.skype.raider.Main. Dies wird auch wahr zurückkehren, wenn es vorhanden ist nein Aktiver Skype -Anruf, aber die Haupt -App ist geöffnet.

Danke für all die Hilfe, besonders Reuben!

Bearbeiten: Ihr wird die folgende Erlaubnis in Ihrem Manifest benötigen

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

Andere Tipps

Der Tag, an dem Skype dies auch ändert (könnte in diesem Update in 2 Tagen vorhanden sein - bevor Sie die Codierung beenden), kann Ihr Code möglicherweise brechen. Ich denke also nicht, dass es sich lohnt, etwas von solchen zu versuchen.

Es tut mir leid, das ist vielleicht keine "Antwort", aber ich denke nicht, dass die investierte Zeit, die in das investiert ist, es wert ist.

Es gibt ein paar Dinge, die Sie tun können, um Ihre Wahrscheinlichkeit zu erhöhen, es zu erraten:

1) Überprüfen Sie, ob die Anwendung ausgeführt wird:

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) Überprüfen Sie den Telefonzustand für den Datenaustausch mit dem Datenaustausch Phonemanager

3) und schließlich Skype überprüfen Entwickler Seite Für jede bekannte API

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top