来自Google Play崩溃报告的AndroidRuntimeException

时间:2013-11-26 10:26:06

标签: java android android-intent

我在Google Play商店有一个应用程序,它适用于大多数人。但是,通过Google崩溃报告报告了90起崩溃事件,其中包括以下内容:

android.util.AndroidRuntimeException: Calling startActivity() from outside of an Activity context requires the FLAG_ACTIVITY_NEW_TASK flag. Is this really what you want?
at android.app.ContextImpl.startActivity(ContextImpl.java:847)
at android.content.ContextWrapper.startActivity(ContextWrapper.java:276)
at android.webkit.CallbackProxy.uiOverrideUrlLoading(CallbackProxy.java:242)
at android.webkit.CallbackProxy.handleMessage(CallbackProxy.java:330)
at android.os.Handler.dispatchMessage(Handler.java:99)
at android.os.Looper.loop(Looper.java:137)
at android.app.ActivityThread.main(ActivityThread.java:4429)
at java.lang.reflect.Method.invokeNative(Native Method)
at java.lang.reflect.Method.invoke(Method.java:511)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:3151)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:2918)
at dalvik.system.NativeStart.main(Native Method)

我在网上浏览了一下,但我能找到的只是添加intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);

但这对我不起作用,因为我在代码中没有调用startActivity()。我打电话给startActivityForResult(),但指定FLAG_ACTIVITY_NEW_TASK标志会停止onActivityResult()中返回的结果。

以下是在我的主要活动中从startActivityForResult()调用onCreate()的唯一代码:

private void load()
{
    Intent loadBeats = new Intent(this, BeatListActivity.class);
    startActivityForResult(loadBeats, SELECT_BEAT_ACTIVITY);
}

我从来没有在我的任何设备或虚拟设备中发生此错误!这一切都很难解决。

有什么想法吗?

2 个答案:

答案 0 :(得分:0)

在有用的评论之后,@ ReubenScratton,按照我的问题,我认为我已经找到了问题/解决方案!

在我的代码中,我不使用startActivity(),所以这让我很困惑。但是,我确实使用AdView(admob广告)版本4.1.1,它似乎打电话给startActivity()。 我在搜索谷歌后发现了这一点。根据我的问题,其他人使用该版本的AdView(GoogleAdMobAdsSdk-4-1-1.jar)报告了相同的错误。

我已使用较新版本更新了我的应用,到目前为止,已经没有更多错误了!

如果不是这种情况,我会报告。

答案 1 :(得分:0)

刚加起来

插页式广告

也会出现此例外情况

您必须传递活动上下文而不是应用程序上下文

InterstitialAd interstitial = new InterstitialAd(this);

片段

InterstitialAd interstitial = new InterstitialAd(getActivity());

而不是

InterstitialAd interstitial = new InterstitialAd(getActivity().getApplicationContext());