ActivityNotFoundException:找不到处理Intent恶意行为的Activity

时间:2016-05-16 00:18:47

标签: android android-intent android-activity twitter-fabric

我有一个正在制作的应用程序,在过去的24小时内,我收到了来自单个用户的50次崩溃(每小时3-4次)。

Fabric将设备类型标记为“sdk”,操作系统版本始终为4.1.1。

这是堆栈跟踪:

Fatal Exception: android.content.ActivityNotFoundException: No Activity found to handle Intent { act=android.intent.action.VIEW dat=market://details?id=com.google.android.gms&pcampaignid=gcore_8487000--- flg=0x80000 pkg=com.android.vending }
   at android.app.Instrumentation.checkStartActivityResult(Instrumentation.java:1545)
   at android.app.Instrumentation.execStartActivity(Instrumentation.java:1416)
   at android.app.Activity.startActivityForResult(Activity.java:3351)
   at android.app.Activity.startActivityForResult(Activity.java:3312)
   at android.support.v4.app.FragmentActivity.startActivityForResult(SourceFile:843)
   at android.app.Activity.startActivity(Activity.java:3522)
   at android.app.Activity.startActivity(Activity.java:3490)
   at com.google.android.gms.dynamic.zza$5.onClick(Unknown Source)
   at android.view.View.performClick(View.java:4084)
   at android.view.View$PerformClick.run(View.java:16966)
   at android.os.Handler.handleCallback(Handler.java:615)
   at android.os.Handler.dispatchMessage(Handler.java:92)
   at android.os.Looper.loop(Looper.java:137)
   at android.app.ActivityThread.main(ActivityThread.java:4745)
   at java.lang.reflect.Method.invokeNative(Method.java)
   at java.lang.reflect.Method.invoke(Method.java:511)
   at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:786)
   at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:553)
   at dalvik.system.NativeStart.main(NativeStart.java)

没有我的包名称的迹象,看起来该应用正在尝试打开我无法控制的内部意图。

这可能是没有Google Play商店的用户/机器人吗?

1 个答案:

答案 0 :(得分:4)

好的,所发生的情况是,您的应用崩溃的设备不包含任何应用来处理从您的应用发送的隐含意图。

这意味着,在您的代码中的某个位置,您可能已经发送了一个带有View操作的隐式intent。现在,当它在一个设备上运行时,它不包含任何用于解析视图意图的Activity,它会崩溃。在开始活动之前,您应该始终检查代码发送的意图是否可以由设备上的其他应用程序处理。类似的东西:

Intent sendIntent = new Intent();
sendIntent.setAction(Intent.ACTION_SEND);
sendIntent.putExtra(Intent.EXTRA_TEXT, textMessage);
sendIntent.setType("text/plain");

// Verify that the intent will resolve to an activity
if (sendIntent.resolveActivity(getPackageManager()) != null) {
    startActivity(sendIntent);
}

正如您在上面的代码中看到的那样,在启动活动之前会调用resolveActivity()方法。如果android没有找到任何能够处理你的意图的应用程序,它将返回null然后你可以放一个else条件并优雅地处理这种情况。我从日志中收集到的是你可能已经发送了一个意图,通过ACTION_VIEW可以在你的应用程序中查看系统找到的任何其他应用程序中的某些项目。

来源:https://developer.android.com/guide/components/intents-filters.html