Метание курсора IllegalStateException: Неизвестный URL: content: // media / external на загрузочном устройстве - PullRequest
0 голосов
/ 24 сентября 2018

Я получаю эту ошибку только при запуске устройства, на эмуляторе у меня нет проблем, и пока я вижу эту проблему на вкладке S2 (7.0) и вкладке S3 (8.0), но не навкладка активна 2 (7.1), что делает ее еще более странной.

Это трассировка стека:

    09-24 15:53:03.651 com.insypro.inspector3.debug W/System.err: java.lang.IllegalStateException: Unknown URL: content://media/external
09-24 15:53:03.657 com.insypro.inspector3.debug W/System.err:     at android.os.Parcel.readException(Parcel.java:1701)
        at android.database.DatabaseUtils.readExceptionFromParcel(DatabaseUtils.java:183)
        at android.database.DatabaseUtils.readExceptionFromParcel(DatabaseUtils.java:135)
        at android.content.ContentProviderProxy.query(ContentProviderNative.java:421)
        at android.content.ContentResolver.query(ContentResolver.java:536)
        at android.content.ContentResolver.query(ContentResolver.java:478)
        at com.insypro.inspector3.utils.PictureObserver$observe$1.apply(PictureObserver.kt:22)
        at com.insypro.inspector3.utils.PictureObserver$observe$1.apply(PictureObserver.kt:13)
        at io.reactivex.internal.operators.flowable.FlowableMap$MapSubscriber.poll(FlowableMap.java:81)
        at io.reactivex.internal.operators.flowable.FlowableConcatMap$ConcatMapImmediate.drain(FlowableConcatMap.java:266)
        at io.reactivex.internal.operators.flowable.FlowableConcatMap$BaseConcatMapSubscriber.onNext(FlowableConcatMap.java:159)
        at io.reactivex.internal.operators.flowable.FlowableMap$MapSubscriber.onNext(FlowableMap.java:57)
        at io.reactivex.internal.operators.flowable.FlowableOnBackpressureBuffer$BackpressureBufferSubscriber.onNext(FlowableOnBackpressureBuffer.java:110)
        at io.reactivex.processors.PublishProcessor$PublishSubscription.onNext(PublishProcessor.java:311)
        at io.reactivex.processors.PublishProcessor.onNext(PublishProcessor.java:195)
        at com.insypro.inspector3.utils.PictureObserver.onChange(PictureObserver.kt:48)
        at android.database.ContentObserver.onChange(ContentObserver.java:145)
        at android.database.ContentObserver.dispatchChange(ContentObserver.java:196)
        at android.database.ContentObserver.-wrap0(ContentObserver.java)
        at android.database.ContentObserver$Transport.onChange(ContentObserver.java:231)
09-24 15:53:03.658 com.insypro.inspector3.debug W/System.err:     at android.database.IContentObserver$Stub.onTransact(IContentObserver.java:62)
        at android.os.Binder.execTransact(Binder.java:573)

По сути, я использую contentobserver для прослушивания сделанных снимков.Однако после запуска планшетов, когда я впервые открываю камеру, создается впечатление, что кнопка захвата не отвечает, и я получаю эту ошибку.После повторного открытия камеры она снова работает нормально.

Это мой контент Observer:

class PictureObserver(private var appContext: WeakReference<Context>) : ContentObserver(null) {

    private val pictureSubject: PublishProcessor<Uri> = PublishProcessor.create()

    fun observe(): Flowable<Picture> =
            pictureSubject.onBackpressureBuffer()
                    .map { uri ->
                        appContext.get()?.let {
                            val cursor = it.contentResolver
                                    .query(uri,
                                            null,
                                            null,
                                            null,
                                            "date_added DESC, _id DESC")
                            if (cursor != null) {
                                if (cursor.moveToNext()) {
                                    val dataColumn = cursor.getColumnIndexOrThrow(MediaStore.MediaColumns.DATA)
                                    val filePath = cursor.getString(dataColumn)
                                    val name = cursor.getColumnIndexOrThrow(MediaStore.MediaColumns.DISPLAY_NAME)
                                    return@map Picture()
                                            .apply {
                                                this.name = cursor.getString(name)
                                                this.path = filePath
                                            }
                                }
                                cursor.close()
                            }
                            return@map Picture()
                        }
                        return@map Picture()
                    }


    override fun onChange(selfChange: Boolean, uri: Uri) {
        pictureSubject.onNext(uri)
    }

}
...