Ich bin auf eine Anforderung gestoßen, aber ich bin nicht in der Lage, den richtigen Weg der Implementierung zu finden und brauche daher Ihre Hilfe.Android App, Aktivitätsstatus (läuft, läuft nicht, Vordergrund/Hintergrund)
Was möchte ich tun? - Ich möchte eine Aktion auszuführen, nach Benachrichtigung abhängig ich wie folgt:
- Wenn App geöffnet und im Vordergrund, dh sichtbar Benutzer und ich Benachrichtigung, zeige ich einfach ein Popup meine Aktivität B
- zu starten, wenn App ist geschlossen, dh weder im Hintergrund noch im Vordergrund und ich bekomme die Benachrichtigung, ich werde meine Anwendung zuerst starten und dann starten Aktivität B
- Wenn die App läuft ABER im Hintergrund dh in recents aber nicht für den Benutzer sichtbar, dann möchte ich starten Meine Aktivität B, ohne die Anwendung neu zu starten. Wenn Benutzer in diesem Fall auf Aktivität B drücken, sollten sie den Bildschirm sehen, den sie verlassen haben, bevor sie in den Hintergrund gesendet werden.
Was habe ich getan? Ich habe Punkt # 1 und # 2 erreicht. Ich möchte Punkt 3 erreichen. Ich habe versucht, die unter
public static boolean isApplicationBroughtToBackground(final Activity activity) {
ActivityManager activityManager = (ActivityManager) activity.getSystemService(Context.ACTIVITY_SERVICE);
List<ActivityManager.RunningTaskInfo> tasks = activityManager.getRunningTasks(1);
// Check the top Activity against the list of Activities contained in the Application's package.
if (!tasks.isEmpty()) {
ComponentName topActivity = tasks.get(0).topActivity;
try {
PackageInfo pi = activity.getPackageManager().getPackageInfo(activity.getPackageName(), PackageManager.GET_ACTIVITIES);
for (ActivityInfo activityInfo : pi.activities) {
if(topActivity.getClassName().equals(activityInfo.name)) {
return false;
}
}
} catch(PackageManager.NameNotFoundException e) {
return false; // Never happens.
}
}
return true;
}
Doch diese gibt true zurück, in beiden Fällen Punkt # 2 und # 3, also bin ich nicht in der Lage nur 3 # zu unterscheiden.
Auch habe ich versucht, die unten in jeder Aktivität Ich habe,
@Override
protected void onPause() {
super.onPause();
saveIsPausedInPref(true);
}
@Override
protected void onResume() {
super.onResume();
saveIsPausedInPref(false);
}
Aber es ist auch nicht das gewünschte Ergebnis Coz geben, wenn die App in den Hintergrund durch Drücken der Home-Taste meine Präferenz wird gesendet isPaused = true und wenn der Benutzer die App aus den letzten entfernt, bleibt sie wahr und ich kann Punkt 2 und 3 nicht mehr unterscheiden, wenn die Benachrichtigung eintrifft.
Entschuldigung für die ganze Geschichte, aber ich hoffe, ich bin in der Lage, meine Anforderung zu erklären.
Vielen Dank im Voraus. :)
Edit:
<activity
android:name=".HomeActivity"
android:screenOrientation="portrait" >
</activity>
<activity
android:name=".ChatProfileActivity"
android:screenOrientation="portrait" >
</activity>
So wie ich in der Lage zu verstehen, müssen Sie die App wechseln, die auf dem Vordergrund stand, wenn der Benutzer 3 'back' Taste auf Aktivität gedrückt? –
Ja, wenn das möglich ist. Idealerweise müsste ich meine App aus dem Hintergrund abrufen und meine Aktivität B darüber starten. –
Zeigen Sie Ihre Manifest-Datei an, ich möchte die Deklarationen von Aktivität A und B sehen. –