onNewIntent nicht genannt
Habe ich sehr seltsame situation.
Mit einer app, habe ich beschlossen, erstellen Sie ein weiteres aus dem code der ersten.
Ich kopierte .xml-Dateien, kopiert .java-Dateien so, dass alles OK ist.
Aber es gibt ein RIESIGES problem: meine onNewIntent(Intent intent)
Methode wird als erstes Projekt, aber es ist nicht aufgerufen, im zweiten Projekt (der code ist der gleiche!)
Methode, die auslösen könnte, aber nicht Auslöser
public void onClick(View arg0) {
Intent browserInt = new Intent (Intent.ACTION_VIEW,
Uri.parse("https://oauth.yandex.ru/authorize?response_type=token&client_id=zzzzz"));
browserInt.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
startActivity(browserInt);
}
Hier onNewIntent () - Methode:
@Override
protected void onNewIntent(Intent intent){
System.out.println(" I WORKED!");
Uri uri = intent.getData();
if (uri!=null) {
String m = uri.toString().split("#")[1];
String[] args = m.split("&");
String arg = args[0];
String token = arg.split("=")[1];
System.out.println(token);
}
}
Sehe ich nicht "ich ARBEITETE" in meinen logs, leider.
Ich gelesen habe viele ähnliche Fragen, sowohl auf als SO und über das Internet versucht, Einstellung, Absicht flags SINGLE_TOP, SINGLE_TASK und so weiter.
Hier ist das Android Manifest der ARBEITEN Projekt:
<application
android:name="yyy"
android:icon="@drawable/yaru_icon"
android:allowBackup="false"
android:label="xxx"
android:theme="@style/LightTheme">
<activity
android:name=".Main"
android:label="xxx"
android:launchMode="singleTask">
<intent-filter>
<action android:name="android.intent.action.MAIN"/>
<category android:name="android.intent.category.LAUNCHER"/>
</intent-filter>
</activity>
</application>
Ich bin ganz verzweifelt, warum der gleiche code nicht mehr funktioniert?
EDIT: ich habe alles versucht: SINGLE_TOP, SINGLE_INSTANCE, SINGLE_TASK..
aber dann habe ich gelegentlich Tat dies auf eine andere Tätigkeit:
Main m = new Main();
m.onNewIntent(this.getIntent());
Und es endlich geklappt!
Ich weiß nicht, ob es ein dirty workaround oder ist das ein bug, wenn jemand erklären kann, bitte kommentieren.
InformationsquelleAutor der Frage Kondra007 | 2014-05-03
Du musst angemeldet sein, um einen Kommentar abzugeben.
PRÄAMBEL:
Allright, ich bin ein wenig spät, aber da stolperte ich über das gleiche Problem und keine Antwort hier oder für eine der anderen vier stackoverflow-Fragen, fand ich für dieses Problem das problem bei mir gelöst, hier ist, was ich dachte.
ANTWORT:
Gibt es mehrere mögliche Gründe, warum onNewIntent nicht genannt und ich werde Sie alle - auch alle, die ich kenne.
android:launchMode="singleTop"
manifest-Eintrag für die Tätigkeit, wo Sie wollen onNewIntent genannt zu werden, oder dem Zweck verwendet, für den Beginn der Aktivität müssen die FlaggeFLAG_ACTIVITY_SINGLE_TOP
. Sie brauchen nicht beide (es ist ein||
kein&&
😉 )! onNewIntent sollte auch genannt werden fürandroid:launchMode="singleTask"
aber bevor Sie benutzen, Sie besser schauen Sie aus dem android:launchMode Dokumentation, denn es hat viel mehr Konsequenzen, als nur eine Funktion aufrufen.android:launchMode="singleTop"
arbeiten festgelegt und somit onNewIntent aus aufgerufen. Der bug wurde nie offiziell gelöst, aber ich konnte es nicht reproduzieren in der version 4.4.2 (Samsung S4 Mini). Es scheint also repariert worden irgendwann zwischen 4.0.x und 4.4.2.Nicht jedes mal, wenn die Voraussetzungen, wie bereits erwähnt erfüllt sind, onNewIntent aufgerufen werden. Die Dokumentation der Funktion angibt:
Das bedeutet, dass, wenn die activity neu erzeugt wurde, onNewIntent nicht aufgerufen werden, egal, was launchMode oder Vorsatz flags hast du gesetzt!
Als eine Variante der Lösung, beschrieben in dem obigen blog-post, können Sie auch nutzen, die Tatsache, dass, egal, wenn onNewIntent oder onCreate aufgerufen wurde, onResume wird immer aufgerufen werden, danach, und tun Sie etwas wie dieses:
Für dieses Beispiel getIntent wird, erhalten Sie immer die Absicht, die Sie für die startActivity aufrufen oder die Mitteilung, wie die new Intent wird auch für die Aktivität, wenn die Aktivität ist frisch erstellt (und damit onCreate aufgerufen wurde).
POSTAMBLE:
Sorry für den langen post. Ich hoffe, Sie finden etwas nützliches.
InformationsquelleAutor der Antwort Moritz
Die Aktivität, die Sie erhalten möchten onNewIntent() sollten
Oder fügen Sie die Flagge tn Absicht
Dokumentiert, wie in onNewIntent(Vorsatz)
InformationsquelleAutor der Antwort Yaroslav Mytkalyk
Hier ist eine situation, die möglicherweise beißen Sie, zusammen mit ein bisschen mehr Informationen:
onNewIntent
aufgerufen wird, wie erwartet, mit diesem code:aber nicht mit diesem code
Der Grund dafür ist, dass in der zweiten code-block, die neue Tätigkeit ist auf die Oberseite Hinzugefügt werden, vor dem Aufruf beenden, die für die aktuelle Tätigkeit, also auf die zweite code-block zu arbeiten, müssen Sie die
FLAG_ACTIVITY_CLEAR_TOP
fahne wie von einigen vorgeschlagen, die anderen Antworten, wie diese:Beachten Sie, dass
finish
ist nicht genannt, an alle hier, denn es heißt für Sie. Aus der Dokumentation für die FLAG_ACTIVITY_CLEAR_TOP Flagge:InformationsquelleAutor der Antwort Nate Cook
War ich mit
onNewIntent
für die Suche nach der Implementierung in Android. Ich stieß auf das problem, dassonNewIntent
war nicht aufgerufen wird, wenn ich die Gehen-Taste auf der Tastatur des emulators. Ich löste das Problem, indem ich die code für die Behandlung der Vorsatz in deronCreate
Methode auch. Dies muss getan werden, um sicherzustellen, dass die Absicht der Aktion umgegangen wird, wenn eine neue Instanz der activity gestartet wird.Diese stellte ein problem dar, wie
onCreate
wird aufgerufen, wenn die Aktivität wird wieder hergestellt von einem früheren Zustand zu. So, die Absicht Behandlung-Methode aufgerufen wird, selbst wenn eine orientierungsänderung stattfindet.Lösung : Verwenden Sie
if (savedInstanceState==null)
um festzustellen, ob Aktivität wiederhergestellt wird, aus einem früheren Zustand, oder ist es eine frische suchen.InformationsquelleAutor der Antwort Yajur Sehgal
Die besten verarbeiten
onNewIntent
mitsingleTop
ist einfach so:Führen Sie dann alle Ihre Logik auf
getIntent
innenonResume
.InformationsquelleAutor der Antwort prodaea
Zu geben, um die onNewIntent-Methode, müssen Sie in Ihrem AndroidManifest.xml Datei nach Satz, den Sie Haupt-Aktivität einen Start-Modus, in diesem Modus starten Sie haben, um singleInstance e.g:
Nun werden Sie in der Lage zu geben, um Sie onNewIntent Methode.
InformationsquelleAutor der Antwort Armando Esparza García