Запись файлов на Android 8.1.0 и выше? - PullRequest
0 голосов
/ 23 января 2019

Я в настоящее время отлаживаю приложение, и у меня появляется сообщение об ошибке между различными версиями Android.

Мое приложение извлекает изображение из базы данных и сохраняет его локально на телефоне. На телефонах Android версии 8.0.0 и ниже - функция работает нормально, изображение сохраняется на телефоне, и пользователь может просматривать файл с помощью DocumentViewer. Вот журнал его работы:

-01-23 09:28:16.787 845-1170/REDACTED W/PluginManager: THREAD WARNING: exec() call to PGEasyFile.getFromUrl blocked the main thread for 312ms. Plugin should use CordovaInterface.getThreadPool().
2019-01-23 09:28:16.794 845-1170/REDACTED D/DocumentViewer: Plugin called
2019-01-23 09:28:16.800 3809-6713/? W/StorageManager: getStorageLowBytes lowPercent : 5, lowBytes : 2898018304, maxLowBytes : 524288000
2019-01-23 09:28:16.809 845-1170/REDACTED D/DocumentViewer: /storage/emulated/0/Android/data/REDACTED/cache/REF1062/3-blackadder.jpg

Однако при использовании андроид устройств на 8.1.0 и выше, когда пользователь нажимает на ссылку с изображением - файл показывает круг загрузки и просто зависает. Он не сохраняет файл изображения на устройстве и не позволяет пользователю просматривать его: LogCat ниже: -

2019-01-23 09:39:53.121 32384-32384/? D/database location: /data/user/0/REDACTED/databases/database.db
2019-01-23 09:39:53.213 32173-32173/REDACTED I/chromium: [INFO:CONSOLE(310)] "Error in Success callbackId: CVData390338918 : TypeError: Cannot read property 'root' of undefined", source: file:///android_asset/www/cordova.js (310)
2019-01-23 09:39:53.229 32173-32173/REDACTED I/chromium: [INFO:CONSOLE(51153)] "Uncaught (in promise) TypeError: Cannot read property 'root' of undefined", source: file:///android_asset/www/app-all.js (51153)
2019-01-23 09:39:53.296 32384-32384/? D/NetworkSecurityConfig: No Network Security Config specified, using platform default
2019-01-23 09:39:53.341 32384-32384/? D/background sync: Logs found 1
2019-01-23 09:39:53.392 32384-32384/? I/SyncService: Completed service @ 1606891142
2019-01-23 09:39:53.394 794-4845/? I/ActivityManager: Killing 31897:android.process.media/u0a14 (adj 906): empty #17
2019-01-23 09:39:53.395 794-811/? W/zygote64: kill(-31897, 9) failed: No such process
2019-01-23 09:39:53.404 32173-32178/REDACTED I/zygote64: Do full code cache collection, code=122KB, data=96KB
2019-01-23 09:39:53.405 32173-32178/REDACTED I/zygote64: After code cache collection, code=114KB, data=71KB
2019-01-23 09:39:53.424 794-811/? W/zygote64: kill(-31897, 9) failed: No such process
2019-01-23 09:39:53.445 794-811/? I/chatty: uid=1000(system) ActivityManager identical 1 line
2019-01-23 09:39:53.453 794-811/? W/zygote64: kill(-31897, 9) failed: No such process
2019-01-23 09:39:53.453 794-811/? I/zygote64: Successfully killed process cgroup uid 10014 pid 31897 in 57ms
2019-01-23 09:39:54.022 32384-32384/REDACTED:remote V/AsyncHttpRH: Progress 6 from 1 (600%)
2019-01-23 09:39:54.058 32384-32384/REDACTED:remote V/AsyncHttpRH: Progress 2002 from 1 (200200%)
2019-01-23 09:39:54.832 32173-32178/REDACTED I/zygote64: Do partial code cache collection, code=114KB, data=75KB
2019-01-23 09:39:54.834 32173-32178/REDACTED I/zygote64: After code cache collection, code=114KB, data=75KB
2019-01-23 09:39:54.834 32173-32178/REDACTED I/zygote64: Increasing code cache capacity to 512KB
2019-01-23 09:39:54.971 578-961/? E/QC-QMI: linux_qmi_qmux_io_wake_lock: Err in writing wakelock=qmuxd_port_wl_0, error [1:Operation not permitted]
2019-01-23 09:39:54.972 578-961/? E/QC-QMI: linux_qmi_qmux_io_wake_unlock: Err in writing wakelock=qmuxd_port_wl_0, error [1:Operation not permitted]
2019-01-23 09:39:56.149 4270-4270/? I/GeofencerStateMachine: sendNewTransitions called.
2019-01-23 09:39:56.178 794-4839/? I/WifiService: getConnectionInfo uid=10018
2019-01-23 09:39:56.183 4270-31866/? I/GCoreUlr: Successfully inserted 1 locations
2019-01-23 09:39:57.512 794-1776/? I/nanohub: osLog: [AR_CHRE] still: 93
2019-01-23 09:39:57.514 794-1776/? I/nanohub: osLog: [AR_CHRE] ON => IDLE
2019-01-23 09:39:57.971 578-961/? E/QC-QMI: linux_qmi_qmux_io_wake_lock: Err in writing wakelock=qmuxd_port_wl_0, error [1:Operation not permitted]
2019-01-23 09:39:57.972 578-961/? E/QC-QMI: linux_qmi_qmux_io_wake_unlock: Err in writing wakelock=qmuxd_port_wl_0, error [1:Operation not permitted]
2019-01-23 09:40:00.060 19108-32409/? D/EventNotificationJob: Running EventNotificationJob, isDetail=true
2019-01-23 09:40:00.084 19108-32409/? D/EventNotificationJob:   finished processing events.
2019-01-23 09:40:01.460 19108-19300/? D/ClClient: Not sending keepalive.  Current connection state=STOPPED

Я смотрел на вещи в данный момент, когда пытался сузить проблему: -

  1. Первое, на что я посмотрел, было то, что Android TargetSDK был довольно низким (22) Я увеличил его до 28.0.3 и все еще имел проблему

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

<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />

Однако он делает это только в ActivityManifest - я думал, что это может быть проблемой, когда запрос разрешений должен запускаться во время выполнения каждый раз, когда пользователь щелкает изображение из-за изменений безопасности в Android 8.1.0 и выше.

Направляюсь ли я в правильном направлении, или кто-то еще видит что-то, что я, возможно, пропустил, или какой угол лучше всего подходит к этому?

Спасибо

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...