#android #android-webview
Вопрос:
Когда я успешно загружаю PDF-файл из веб-представления, я могу открыть его с намерением ПРОСМОТРА. Когда я нажимаю кнопку «Назад», я возвращаюсь в свое собственное приложение. Однако, когда я загружаю и открываю другой PDF-файл, первый PDF-файл, похоже, все еще находится в стеке. Мне нужно дважды нажать кнопку «Назад», чтобы вернуться к своему приложению. Это верно независимо от того, использую ли я главную кнопку навигации «Назад» или кнопку в строке заголовка действия по просмотру PDF.
Что мне нужно изменить, чтобы убедиться, что в стеке находится только открываемый мной PDF-файл?
setDownloadListener { url, _, _, mimetype, _ -gt; val downloadUri = Uri.parse(url) val downloadRequest = DownloadManager.Request(downloadUri).apply { setTitle("Title") setDescription("Downloading file") setDestinationInExternalFilesDir(context, Environment.DIRECTORY_DOWNLOADS, downloadUri.lastPathSegment) addRequestHeader("Cookie", CookieManager.getInstance().getCookie(url)) } val manager: DownloadManager = getSystemService(Context.DOWNLOAD_SERVICE) as DownloadManager val downloadId = manager.enqueue(downloadRequest) registerReceiver( object: BroadcastReceiver() { override fun onReceive(context: Context?, intent: Intent?) { Log.w("onReceive", "${intent?.action}") if (intent !== null amp;amp; DownloadManager.ACTION_DOWNLOAD_COMPLETE == intent.action) { val cursor = manager.query(DownloadManager.Query().apply{ setFilterById(downloadId) }) if (cursor.moveToFirst()) { val downloadStatus = cursor.getInt(cursor.getColumnIndex(DownloadManager.COLUMN_STATUS)) val downloadLocalUri = cursor.getString(cursor.getColumnIndex(DownloadManager.COLUMN_LOCAL_URI)) val downloadMimeType = cursor.getString(cursor.getColumnIndex(DownloadManager.COLUMN_MEDIA_TYPE)) if (downloadStatus == DownloadManager.STATUS_SUCCESSFUL amp;amp; downloadLocalUri !== null) { val viewIntent = Intent(Intent.ACTION_VIEW).apply { this.setDataAndType(Uri.parse(downloadLocalUri), downloadMimeType) this.flags = Intent.FLAG_ACTIVITY_NEW_TASK or Intent.FLAG_ACTIVITY_CLEAR_TASK } if (viewIntent.resolveActivity(packageManager) !== null) { startActivity( Intent.createChooser(viewIntent, "Choose app") ) } else { Toast.makeText(context, "No app available that can open file", Toast.LENGTH_SHORT).show() } } else { Toast.makeText(context, "Unable to download file", Toast.LENGTH_SHORT).show() Log.w("onReceive", "failure reason ${cursor.getString(cursor.getColumnIndex(DownloadManager.COLUMN_REASON))}, ${cursor.getString(cursor.getColumnIndex(DownloadManager.COLUMN_STATUS))}") } } } } }, IntentFilter(DownloadManager.ACTION_DOWNLOAD_COMPLETE) ) }
Комментарии:
1. Android-версия используемого устройства? Сколько просмотров PDF вы протестировали?
2.
Intent.FLAG_ACTIVITY_NEW_TASK
Не используйте такие флаги. Эксперимент.3. Я тестирую с помощью эмулятора Android 8.1 и использую средство просмотра PDF по умолчанию, которое поставляется вместе с ним.
4. Я включил эти флаги в опубликованный код, потому что именно так я попытался решить проблему.