Сбой после запускаActivityForResult в API 27

51
4

После обновления до API 27 и библиотеки поддержки 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, но я не думаю, что он решит проблему сбоя.


Является ли это проблемой платформы или могу исправить это?


Edit


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 жалуется, как указано выше. Это может быть связано с проблемой.

спросил(а) 2017-12-04T21:21:00+03:00 2 года, 4 месяца назад
1
Решение
51

Вы можете попробовать этот код.

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

ответил(а) 2017-12-07T14:21:00+03:00 2 года, 4 месяца назад
37

Используйте ActivityOptionsCompat вместо ActivityOptions для ниже api 21.


ActivityOptionsCompat - это вспомогательный класс для доступа к функциям ActivityOptions с обратной совместимостью.


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 {
ActivityOptionsCompat options = ActivityOptionsCompat
.makeCustomAnimation(activity,R.anim.slide_in_from_right,R.anim.fade_out);
ActivityCompat.startActivity(this, intent, options.toBundle());
}

Надеюсь, это поможет вам.

ответил(а) 2017-12-07T14:37:00+03:00 2 года, 4 месяца назад
Ваш ответ
Введите минимум 50 символов
Чтобы , пожалуйста,
Выберите тему жалобы:

Другая проблема