android–onNewIntent未被调用

android–onNewIntent未被调用,第1张

概述我的情况很奇怪.有一个应用程序,我决定从第一个应用程序的代码创建另一个.我复制了.xml文件,复制了.java文件以便一切正常.但是有一个巨大的问题:在第一个项目中调用了我的onNewIntent(Intentintent)方法,但是在第二个项目中没有调用它(代码是相同的!)方法,可以触发,但现在无法触发

我的情况很奇怪.
有一个应用程序,我决定从第一个应用程序的代码创建另一个.
我复制了.xml文件,复制了.java文件以便一切正常.
但是有一个巨大的问题:在第一个项目中调用了我的onNewIntent(Intent intent)方法,但是在第二个项目中没有调用它(代码是相同的!)
方法,可以触发,但现在无法触发

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);}

这是onNewIntent()方法:

@OverrIDeprotected 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);    }   }

遗憾的是,我在日志中看不到“我工作”.
我在SO和Internet上都阅读了很多类似的问题,尝试设置Intent标志SINGLE_top,SINGLE_TASK等等.

这是AndroID Manifest的WORKING项目:

<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>

我非常绝望,为什么类似的代码不再起作用了?

编辑:我已经尝试了一切:SINGLE_top,SINGLE_INSTANCE,SINGLE_TASK ..
但后来我偶尔会在另一项活动中做到这一点:

Main m = new Main();m.onNewIntent(this.getIntent());

它终于奏效了!
我不知道,无论是肮脏的解决方法还是错误,如果有人能够解释它,请评论.

解决方法:

前言:

好吧,我对这个问题有点晚了,但是当我偶然发现同样的问题并且没有回答或者其他四个stackoverflow问题时,我找到了这个问题,为我解决了问题,这就是我想的出.

回答:

有几个可能的原因,为什么onNewIntent没有被调用,我将列出所有 – 所有这些我知道.

>正如onNewIntent函数的文档(在Yaroslavs答案中的链接)中的许多答案中所提到的,你要么需要活动的androID:launchMode =“singletop”清单条目,你要在其中调用onNewIntent,或者Intent用于启动活动必须具有标志FLAG_ACTIVITY_SINGLE_top.你不需要两者(它是||不是&&amp ;;-))!也应该为androID调用onNewIntent:launchMode =“singleTask”,但在使用它之前,最好检查一下androID:launchMode文档,因为它比一个函数调用有更多的后果.
>在早期版本的AndroID中有一个bug,它基本上阻止了androID:launchMode =“singletop”从指定工作,因此onNewIntent被调用.该错误从未正式解决,但我无法在版本4.4.2(三星S4迷你)中重现它.所以它似乎已经在4.0.x和4.4.2之间的某个点固定.
>并非每次满足前面提到的前提条件时,都会调用onNewIntent.作为函数的文档说明:

…when the activity is re-launched while at the top of the activity stack instead of a new instance of the activity being started, onNewIntent() will be called on the existing instance with the Intent that was used to re-launch it.

这意味着,如果活动是新创建的,无论你设置了什么launchMode或Intent标志,都不会调用onNewIntent!

>根据我的理解,调用onCreate或onNewIntent,但从不同时调用.
>因此,如果您想通过Intent将数据传递给活动,它应该始终有效(如我的情况),无论活动是重新启动还是活动是新创建的,您都可以按照this very useful blog post中的描述进行 *** 作.
>作为上述博客文章中描述的解决方案的变体,您还可以利用这样的事实:无论是否调用onNewIntent或onCreate,onResume将始终被调用,并执行以下 *** 作:

@OverrIDeprotected voID onNewIntent(Intent intent) {    super.onNewIntent(intent);    setIntent(intent);}@OverrIDeprotected voID onResume() {    super.onResume();    Intent intent = getIntent();    // ... do what you wanna do with the intent}

对于此示例,getIntent将始终为您提供用于startActivity调用或Notification的Intent,因为如果Activity是新创建的(因此调用了onCreate),也将为Activity设置新的Intent.

POSTAMBLE:

对不起,很长的帖子.我希望你能找到一些有用的东西.

总结

以上是内存溢出为你收集整理的android – onNewIntent未被调用全部内容,希望文章能够帮你解决android – onNewIntent未被调用所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/web/1102173.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2022-05-28
下一篇2022-05-28

发表评论

登录后才能评论

评论列表(0条)

    保存