
我的情况很奇怪.
有一个应用程序,我决定从第一个应用程序的代码创建另一个.
我复制了.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.你不需要两者(它是||不是&& ;;-))!也应该为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未被调用所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)