Ich habe 3 Hauptklasse in der AnwendungAnwendung abnormales Verhalten Aktivität nicht in der Absicht erwähnt beginnen
1) Intent Service: wo ich Push-Benachrichtigung und offene Aktivität nach Benachrichtigung und die beiden anderen Klassen Verhalten erhalten. unten ist der Code, der tut der
if(Global.isMainScreenRunning){
Intent intent = new Intent(this, MainScreen.class);
intent.setFlag(Intent.FLAG_ACTIVITY_NEW_TASK);
startActivity(intent);
} else if(!Global.NotificationScreenRunning){
Intent intent = new Intent(this, NotificationScreen.class);
intent.setFlag(Intent.FLAG_ACTIVITY_NEW_TASK);
startActivity(intent);
}
2) NotificationScreen: Dies ist der Mediator Bildschirm so, wenn die Anwendung nicht diesen Bildschirm läuft zuerst angezeigt wird und auf Klick auf Schaltfläche Ja dieses Bildschirms Mainscreen geöffnet und Dieser Bildschirm wird beendet.
3) Hauptbildschirm: Dies ist der Hauptbildschirm der Anwendung, die Karte zeigen. Sein Kernverhalten ist, dass ts ein launchmode="singletask"
in Menifest-Datei erwähnt, was bedeutet, wenn dieser Bildschirm läuft seine Loch-Daten werden an onNewIntent()
Methode gesendet werden, anstatt diesen Bildschirm wieder zu öffnen.
Nun, was in Fluss geschieht, ist
Schritt 1: Anwendung im Hintergrund ist und Push-Benachrichtigung kommt. Zustand läuft und die zweite Bedingung bekommt Erfolg und Benachrichtigungsbildschirm Absicht
geschossen wirdSchritt 2: Im Benachrichtigungsbildschirm ich auf ihrer Schaltfläche klicken, um den nächsten Hauptbildschirm zu bewegen, auf
Schritt 3: Im Hauptbildschirm ich diesen Prozess Info und Aufgabe ausführen oder einfach die Anwendung schließen
Schritt 4: erneut eine neue Benachrichtigung erhalten und als die Anwendung nicht ausgeführt wird, geht in die zweite Bedingung und starten Sie die Absicht für die Benachrichtigung Bildschirm, aber diesmal kein Benachrichtigungsbildschirm gestartet wird von seiner Absicht und Hauptbildschirm wird gestartet, was falsch ist.
Dies ist das abnormale Verhalten, das ich statt der Bereitstellung von Klasse von Benachrichtigungsbildschirm für Absicht Hauptbildschirm gestartet ist, die völlig anders ist Verhalten der Anwendung nach Android.
Jede Hilfe von jemandem, der auf ein solches Problem stoßen wird sehr geschätzt.
bearbeiten
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.example.app"
android:versionCode="1"
android:versionName="1.0" >
<uses-sdk
android:minSdkVersion="15"
android:targetSdkVersion="18" />
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.RECORD_AUDIO" />
<uses-permission android:name="android.permission.CAMERA" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
<uses-permission android:name="android.permission.ACCESS_MOCK_LOCATION" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<uses-permission android:name="android.permission.WAKE_LOCK" />
<uses-feature android:name="android.hardware.camera" />
<uses-feature android:name="android.hardware.camera.front" />
<uses-feature android:name="android.hardware.camera.autofocus" />
<uses-feature android:name="android.hardware.microphone" />
<uses-permission android:name="android.permission.READ_CONTACTS" />
<uses-permission android:name="android.permission.GET_ACCOUNTS" />
<uses-permission android:name="com.google.android.c2dm.permission.RECEIVE" />
<permission android:name="com.example.app.permission.C2D_MESSAGE"
android:protectionLevel="signature" />
<uses-permission android:name="com.example.app.permission.C2D_MESSAGE" />
<supports-screens
android:largeScreens="true"
android:normalScreens="true"
android:smallScreens="true"
android:xlargeScreens="true" />
<application
android:allowBackup="true"
android:icon="@drawable/android_app_icon"
android:label="@string/app_name"
android:theme="@style/AppTheme" >
<activity
android:name=".SplashScreen"
android:configChanges="keyboardHidden|orientation"
android:label="@string/app_name"
android:screenOrientation="portrait" >
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
<activity
android:name=".MainScreen"
android:configChanges="keyboardHidden|orientation"
android:launchMode="singleTask"
android:excludeFromRecents="true"
android:screenOrientation="portrait" >
</activity>
<activity
android:name=".NotificationScreen"
android:configChanges="keyboardHidden|orientation"
android:excludeFromRecents="true"
android:screenOrientation="portrait" >
</activity>
<receiver
android:name=".pushnotification.GcmBroadcastReceiver"
android:permission="com.google.android.c2dm.permission.SEND" >
<intent-filter>
<action android:name="com.google.android.c2dm.intent.RECEIVE" />
<category android:name="com.selebrety.app" />
</intent-filter>
</receiver>
<service android:name=".pushnotification.GcmIntentService" />
<meta-data android:name="com.google.android.gms.version"
android:value="@integer/google_play_services_version" />
</application>
</manifest>
Zweite bearbeiten
Das mobile, in dem ich testen bin, ist "YU Yureka" hier link seine Spezifikation ist. Aktuelle es Android 5.0.2 OS
Dritte bearbeiten
Um zu testen, um dieses Verhalten habe ich den Code aus Eclipse Debugger debuggt. Um dies zu überprüfen habe ich einen Breakpoint in NotificationScreen
onResume
und onCreate
gesetzt aber es wurde nie statt onResume
von MainScreen
getroffen.
Auch ich habe eine Anmeldung hinzugefügt, wenn und sonst Bedingung, aber immer noch Protokolle für sonst Bedingung wird gedruckt.
Vierter bearbeiten Global.isMainScreenRunning
: global ist boolean
Variable, die in von MainScreen
falsch gemacht wird und in onResume
von MainScreen
wahr gemacht.
Global.NotificationScreenRunning
: global ist boolean
Variable, die in von NotificationScreen
falsch gemacht wird und in onResume
von NotificationScreen
wahr gemacht.
Wie global ist. isMainScreenRunning deklariert? – TameHog
public static boolean in der globalen Klasse. Dies gilt für onResume und false in onPause. –
Wie haben Sie gezeigt, dass die zweite Bedingung ausgeführt wird? –