Ho incontrato un requisito ma non sono in grado di ottenere il modo corretto di implementazione e quindi ho bisogno del vostro aiuto.App Android, stato attività (in esecuzione, non in esecuzione, primo piano/sfondo)
Cosa voglio fare? - Voglio eseguire un'azione a seconda notifica ottengo come segue:
- Quando applicazione è aperta e in primo piano cioè visibile agli utenti e ottengo la notifica mostro semplicemente un popup per iniziare la mia attività B
- Quando l'app è chiusa cioè né in background né in primo piano e ricevo la notifica Iniziamo prima la mia applicazione e poi avvio l'attività B
- Quando l'app è in esecuzione MA in background cioè in ritroso ma non visibile all'utente, quindi voglio iniziare la mia attività B senza riavviare l'applicazione. Inoltre, in questo caso quando l'utente preme di nuovo l'attività B, dovrebbe vedere lo schermo che avevano lasciato prima di inviarlo allo sfondo.
Cosa ho fatto? Ho raggiunto il punto n. 1 e n. Voglio raggiungere il punto # 3. Ho provato il seguito
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;
}
Tuttavia questa restituisce true in entrambi i casi, il punto # 2 e # 3, quindi non sono in grado di distinguere solo # 3.
Inoltre ho provato il seguito in ogni attività che ho,
@Override
protected void onPause() {
super.onPause();
saveIsPausedInPref(true);
}
@Override
protected void onResume() {
super.onResume();
saveIsPausedInPref(false);
}
Ma, inoltre, non dà il risultato desiderato coz se l'applicazione viene inviato a sfondo premendo il tasto Home mia preferenza avrà isPaused = true e se l'utente rimuove l'app dal recente, allora rimarrà true e di nuovo non riuscirò a differenziare i punti 2 e 3 quando arriva la notifica.
Ci scusiamo per l'intera storia, ma spero di essere in grado di spiegare la mia esigenza.
Grazie in anticipo. :)
Edit:
<activity
android:name=".HomeActivity"
android:screenOrientation="portrait" >
</activity>
<activity
android:name=".ChatProfileActivity"
android:screenOrientation="portrait" >
</activity>
Così come ho potuto capire, è necessario passare per l'applicazione che si trovava al primo piano quando tasto 'back' utente ha premuto l'Activity 3? –
Sì potrebbe essere se è un modo possibile. Idealmente avrei bisogno di richiamare la mia app da sfondo e iniziare la mia attività B su di essa. –
mostra il file manifest, voglio vedere le dichiarazioni di attività A e B. –