Как запретить приложениям для просмотра PDF сохранять предыдущие PDF-файлы в стеке?

#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. Я включил эти флаги в опубликованный код, потому что именно так я попытался решить проблему.