Android API 27中startActivityForResult后的碰撞

Android API 27中startActivityForResult后的碰撞,android,android-support-library,startactivityforresult,Android,Android Support Library,Startactivityforresult,在更新到API 27和Support library 27.0.2之后,我突然在Crashlytics中获得了很多堆栈跟踪: Fatal Exception: java.lang.IllegalArgumentException at android.os.Parcel.readException(Parcel.java:1544) at android.os.Parcel.readException(Parcel.java:1493) at android.app.Ac

在更新到API 27和Support library 27.0.2之后,我突然在Crashlytics中获得了很多堆栈跟踪:

Fatal Exception: java.lang.IllegalArgumentException
    at android.os.Parcel.readException(Parcel.java:1544)
    at android.os.Parcel.readException(Parcel.java:1493)
    at android.app.ActivityManagerProxy.isTopOfTask(ActivityManagerNative.java:5108)
    at android.app.Activity.isTopOfTask(Activity.java:5688)
    at android.app.Activity.startActivityForResult(Activity.java:3973)
    at android.support.v4.app.BaseFragmentActivityApi16.startActivityForResult(Source:54)
    at android.support.v4.app.FragmentActivity.startActivityForResult(Source:67)
我称之为:

ActivityOptions options = ActivityOptions.makeCustomAnimation(activity, R.anim.slide_in_from_right, R.anim.fade_out);
startActivityForResult( intent, REQ_ACTION, options.toBundle());
我无法阅读源代码,因为它尚未发布。我甚至试着替换和使用android-26代码,但它是不同的

上面的调用有一个警告,说明BaseFragmentActivityApi16.startActivityForResult只能从同一个库组调用,因此我使用ActivityCompat修复了它,但我认为它不会解决崩溃问题

这是平台问题还是我可以解决

编辑

if (Build.VERSION.SDK_INT >= 21) {
    ActivityOptions options = ActivityOptions.makeCustomAnimation(activity, R.anim.slide_in_from_right, R.anim.fade_out);
    startActivityForResult(intent, REQ_ACTION, options.toBundle());
} else {
    ActivityOptions options = ActivityOptions.makeCustomAnimation(activity, R.anim.slide_in_from_right, R.anim.fade_out);
    ActivityCompat.startActivityForResult(this, intent, REQ_ACTION, options.toBundle());
}

如果我根据我评论中的链接将其更改为上述内容,Android Studio会像上面那样抱怨。这可能与问题有关。

您可以尝试此代码

startActivityForResult( intent, REQ_ACTION)
overridePendingTransition(R.anim.slide_in_from_right,  R.anim.fade_out);

对于以下api 21,请使用ActivityOptions Compat而不是ActivityOptions

ActivityOptions Compat是一个帮助器类,用于以向后兼容的方式访问ActivityOptions中的功能


希望这能对你有所帮助。

这是一篇老文章,但没有得到回复,所以这里是我在21世纪的发现+

确保您正在活动对象下查找startActivityForResult。 在Context对象下,您可以找到StartActivity,但不会看到startActivityForResult方法

如果您的上下文是上下文类,但却是活动,那么请确保将其强制转换为活动

Context context = ...;
context.startActivityForResult(...); // this method will not exist
((Activity)context).startActivityForResult(...); // this method should be ok

你可能会遇到这个问题(因为这基本上是一个技术支持问题,所以关闭了)@BenP。这看起来是一个完全不同的问题,偶然也涉及到了包裹。在我看来,这更像是一个动画和支持库问题。根据这篇文章,你不应该使用API 21以上的ActivityOptionsCompat:我不使用它,但我仍然有这个崩溃。我想它还是用错了版本。我用动画选项更新了这个问题;这就是我在工作中使用的application@MuhammadSaad这也许能解决问题,但我不想把孩子和洗澡水一起扔掉。我需要结果,你知道。那可能会解决它。我只需要等待几天或几周,直到我们的应用程序的下一个版本提交,我会接受答案。当然。我将等待:)这种方法是否有助于解决问题@Herrbert74?这从IDE中删除了警告。但不确定这是否能解决这场车祸。我会等几天。谢谢我使用的是27.1.0,崩溃是从6.0.1开始的
Context context = ...;
context.startActivityForResult(...); // this method will not exist
((Activity)context).startActivityForResult(...); // this method should be ok