Итак, у меня проблема, когда каждый раз, когда я выбираю изображение, приложение принудительно закрывается, и, конечно, выбранное изображение не может быть отправлено в другое действие, но для активности камеры все работает нормально. Это мой код
ChooseActivity.kt
private fun takePhoto() {
val cameraIntent = Intent(MediaStore.ACTION_IMAGE_CAPTURE)
startActivityForResult(cameraIntent, CAMERA_REQUEST)
}
private fun chooseLibrary() {
val libraryIntent = Intent(Intent.ACTION_PICK, MediaStore.Images.Media.EXTERNAL_CONTENT_URI)
startActivityForResult(libraryIntent, LIBRARY_REQUEST)
override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) {
if (resultCode != Activity.RESULT_OK) return
when (requestCode) {
CAMERA_REQUEST -> {
val thumbnail: Bitmap = data!!.getParcelableExtra("data")
val intent = Intent(this@ChooseActivity, StillImageActivity::class.java)
intent.putExtra("bitmap", thumbnail)
startActivity(intent)
finish()
}
LIBRARY_REQUEST -> {
val uri: Uri = data!!.getData()!!
val bitmap = MediaStore.Images.Media.getBitmap(this.contentResolver, uri)
val intent = Intent(this@ChooseActivity, StillImageActivity::class.java)
intent.putExtra("bitmap", bitmap)
startActivity(intent)
finish()
}
}
}
companion object {
private const val CAMERA_REQUEST = 10
private const val LIBRARY_REQUEST = 20
}
}
Первоначально я использую код из CAMERA_REQUEST для LIBRARY_REQUEST, кроме переменной, но он не работает , поэтому я решил поискать какое-либо исправление, и все равно не повезло
, и я использую этот код для получения результата в другом действии
StillImageActivity.kt
fun getImage() {
val extras = intent.extras
if (extras != null) {
val bitmap = extras["bitmap"] as Bitmap
if (bitmap != null) {
imagePreview?.setImageBitmap(bitmap)
classifyImage(bitmap)
}
}
}
Я делаю это как функцию, потому что я хотел назвать это здесь, чтобы изображение было классифицировано. Это приложения для классификации изображений
// Setup image classifier.
try {
classifier = ImageClassifier(this)
} catch (e: FirebaseMLException) {
textView?.text = getString(R.string.fail_to_initialize_img_classifier)
}
// Classify the sent image
getImage()
}
любое возможное решение этой проблемы? Я хотел, чтобы выбранное изображение из галереи было получено с помощью этой функции, поэтому оно будет немедленно классифицировано, как и активность камеры, или, если есть какое-либо лучшее решение, это очень поможет.
Это ошибка logcat
2020-08-05 17:24:42.425 27490-27490/com.google.firebase.codelab.mlkit.automl E/JavaBinder: !!! FAILED BINDER TRANSACTION !!! (parcel size = 1639092)
2020-08-05 17:24:42.429 27490-27490/com.google.firebase.codelab.mlkit.automl D/AndroidRuntime: Shutting down VM
2020-08-05 17:24:42.435 27490-27490/com.google.firebase.codelab.mlkit.automl E/AndroidRuntime: FATAL EXCEPTION: main
Process: com.google.firebase.codelab.mlkit.automl, PID: 27490
java.lang.RuntimeException: Failure delivering result ResultInfo{who=null, request=20, result=-1, data=Intent { dat=content://com.google.android.apps.photos.contentprovider/-1/1/content://media/external/images/media/3724/ORIGINAL/NONE/image/jpeg/1941833173 flg=0x1 clip={text/uri-list U:content://com.google.android.apps.photos.contentprovider/-1/1/content%3A%2F%2Fmedia%2Fexternal%2Fimages%2Fmedia%2F3724/ORIGINAL/NONE/image%2Fjpeg/1941833173} }} to activity {com.google.firebase.codelab.mlkit.automl/com.google.firebase.codelab.mlkit.automl.ChooseActivity}: java.lang.RuntimeException: Failure from system
at android.app.ActivityThread.deliverResults(ActivityThread.java:4845)
at android.app.ActivityThread.handleSendResult(ActivityThread.java:4886)
at android.app.servertransaction.ActivityResultItem.execute(ActivityResultItem.java:51)
at android.app.servertransaction.TransactionExecutor.executeCallbacks(TransactionExecutor.java:135)
at android.app.servertransaction.TransactionExecutor.execute(TransactionExecutor.java:95)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:2016)
at android.os.Handler.dispatchMessage(Handler.java:107)
at android.os.Looper.loop(Looper.java:214)
at android.app.ActivityThread.main(ActivityThread.java:7356)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:491)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:930)
Caused by: java.lang.RuntimeException: Failure from system
at android.app.Instrumentation.execStartActivity(Instrumentation.java:1718)
at android.app.Activity.startActivityForResult(Activity.java:5210)
at androidx.fragment.app.FragmentActivity.startActivityForResult(FragmentActivity.java:767)
at android.app.Activity.startActivityForResult(Activity.java:5168)
at androidx.fragment.app.FragmentActivity.startActivityForResult(FragmentActivity.java:754)
at android.app.Activity.startActivity(Activity.java:5539)
at android.app.Activity.startActivity(Activity.java:5507)
at com.google.firebase.codelab.mlkit.automl.ChooseActivity.onActivityResult(ChooseActivity.kt:60)
at android.app.Activity.dispatchActivityResult(Activity.java:8131)
at android.app.ActivityThread.deliverResults(ActivityThread.java:4838)
at android.app.ActivityThread.handleSendResult(ActivityThread.java:4886)
at android.app.servertransaction.ActivityResultItem.execute(ActivityResultItem.java:51)
at android.app.servertransaction.TransactionExecutor.executeCallbacks(TransactionExecutor.java:135)
at android.app.servertransaction.TransactionExecutor.execute(TransactionExecutor.java:95)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:2016)
at android.os.Handler.dispatchMessage(Handler.java:107)
at android.os.Looper.loop(Looper.java:214)
at android.app.ActivityThread.main(ActivityThread.java:7356)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:491)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:930)
Caused by: android.os.TransactionTooLargeException: data parcel size 1639092 bytes
at android.os.BinderProxy.transactNative(Native Method)
at android.os.BinderProxy.transact(BinderProxy.java:511)
at android.app.IActivityTaskManager$Stub$Proxy.startActivity(IActivityTaskManager.java:3847)
at android.app.Instrumentation.execStartActivity(Instrumentation.java:1712)
at android.app.Activity.startActivityForResult(Activity.java:5210)
at androidx.fragment.app.FragmentActivity.startActivityForResult(FragmentActivity.java:767)
at android.app.Activity.startActivityForResult(Activity.java:5168)
at androidx.fragment.app.FragmentActivity.startActivityForResult(FragmentActivity.java:754)
at android.app.Activity.startActivity(Activity.java:5539)
at android.app.Activity.startActivity(Activity.java:5507)
at com.google.firebase.codelab.mlkit.automl.ChooseActivity.onActivityResult(ChooseActivity.kt:60)
at android.app.Activity.dispatchActivityResult(Activity.java:8131)
at android.app.ActivityThread.deliverResults(ActivityThread.java:4838)
at android.app.ActivityThread.handleSendResult(ActivityThread.java:4886)
at android.app.servertransaction.ActivityResultItem.execute(ActivityResultItem.java:51)
at android.app.servertransaction.TransactionExecutor.executeCallbacks(TransactionExecutor.java:135)
at android.app.servertransaction.TransactionExecutor.execute(TransactionExecutor.java:95)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:2016)
at android.os.Handler.dispatchMessage(Handler.java:107)
at android.os.Looper.loop(Looper.java:214)
at android.app.ActivityThread.main(ActivityThread.java:7356)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:491)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:930)
2020-08-05 17:24:42.460 27490-27490/com.google.firebase.codelab.mlkit.automl I/Process: Sending signal. PID: 27490 SIG: 9