Crash setelah startActivityForResult di API 27

Setelah memperbarui ke API 27 dan Pustaka Dukungan 27.0.2 tiba-tiba saya mendapatkan banyak jejak tumpukan ini di 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)

Saya menyebutnya seperti:

ActivityOptions options = ActivityOptions.makeCustomAnimation(activity, R.anim.slide_in_from_right, R.anim.fade_out);
startActivityForResult( intent, REQ_ACTION, options.toBundle());

Saya tidak dapat membaca kode sumbernya karena belum dirilis. Saya bahkan mencoba mengganti dan menggunakan kode Android-26, tetapi berbeda.

Ada peringatan untuk panggilan di atas yang mengatakan bahwa BaseFragmentActivityApi16.startActivityForResult hanya dapat dipanggil dari grup perpustakaan yang sama, jadi saya memperbaikinya dengan menggunakan ActivityCompat, tetapi menurut saya ini tidak akan menyelesaikan masalah kerusakan.

Apakah ini masalah platform atau bisakah saya memperbaikinya?

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());
}

Jika saya ubah ke atas sesuai link di komentar saya, Android Studio mengeluh seperti di atas. Ini mungkin terkait dengan masalahnya.


person Herrbert74    schedule 04.12.2017    source sumber
comment
Anda mungkin menemukan stackoverflow.com/q/47257407/8298909 ini (ditutup karena pada dasarnya ini adalah pertanyaan dukungan teknis)   -  person Ben P.    schedule 04.12.2017
comment
@BenP. Kelihatannya masalah yang sangat berbeda, yang secara tidak sengaja melibatkan Parcelables juga.   -  person Herrbert74    schedule 07.12.2017
comment
Bagi saya, ini lebih mirip masalah animasi dan perpustakaan dukungan. Menurut postingan ini Anda tidak boleh menggunakan ActivityOptionsCompat di atas API 21: stackoverflow.com/a/42455484/1067763 Saya tidak Saya tidak menggunakannya, tapi saya masih mengalami error ini. Saya pikir itu masih menggunakan versi yang salah. Saya memperbarui pertanyaan dengan opsi animasi.   -  person Herrbert74    schedule 07.12.2017
comment
startActivity(niat, opsi.toBundle()); Inilah yang saya gunakan dalam aplikasi saya   -  person Muhammad Saad    schedule 07.12.2017
comment
@MuhammadSaad Ini mungkin menyelesaikan masalah, tapi saya tidak ingin membuang bayi bersama air mandi. Saya butuh hasilnya, Anda tahu.   -  person Herrbert74    schedule 07.12.2017


Jawaban (3)


Anda dapat mencoba kode ini.

startActivityForResult( intent, REQ_ACTION)
overridePendingTransition(R.anim.slide_in_from_right,  R.anim.fade_out);
person Muhammad Saad    schedule 07.12.2017
comment
Itu mungkin akan menyelesaikannya. Saya hanya perlu menunggu beberapa hari atau minggu hingga versi berikutnya dari aplikasi kami dikirimkan dan saya akan menerima jawabannya. - person Herrbert74; 07.12.2017
comment
Tentu. aku akan menunggu :) - person Muhammad Saad; 07.12.2017
comment
Apakah pendekatan ini membantu memperbaiki masalah @ Herrbert74? - person lini sax; 09.04.2019

Posting lama tapi belum terjawab, jadi inilah yang saya temukan di usia 21+

Pastikan Anda mencari startActivityForResult di bawah objek aktivitas. Di bawah objek Konteks Anda dapat menemukan startActvity tetapi Anda tidak akan melihat metode startActivityForResult.

Jika konteks Anda adalah kelas Konteks tetapi merupakan suatu aktivitas, pastikan Anda mentransmisikannya ke Aktivitas.

Context context = ...;
context.startActivityForResult(...); // this method will not exist
((Activity)context).startActivityForResult(...); // this method should be ok
person Zunair    schedule 19.08.2018
comment
Ini menghapus peringatan dari IDE. Tapi saya tidak yakin ini akan menyelesaikan kecelakaan itu. Saya akan menunggu beberapa hari. Terima kasih. Saya menggunakan 27.1.0 dan crash berasal dari 6.0.1 - person Aram; 12.12.2018

Gunakan ActivityOptionsCompat alih-alih ActivityOptions untuk api 21 di bawah.

ActivityOptionsCompat adalah kelas pembantu untuk mengakses fitur di ActivityOptions dengan cara yang kompatibel.

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());
}

Semoga ini bisa membantu Anda.

person Vishal Chauhan    schedule 07.12.2017