Отображать уведомление о сбое загрузки с помощью диспетчера загрузок для Android TV?

#java #android

#java #Android

Вопрос:

Я пытаюсь создать свое первое приложение с помощью Android Studio.Это для Android TV. Я не могу понять, как уведомить пользователя о сбое загрузки. Это приложение для Android TV, поэтому в нем нет строки состояния для отображения прогресса менеджеров загрузок.Код как есть отображает результаты любого нажатия кнопки, включая те, которые из mainactivity2. Однако, очевидно, что, как у меня есть, он отображает одно и то же сообщение при получении ACTION_DOWNLOAD_COMPLETE независимо от успеха или неудачи. Я перепробовал много методов, но большинство из них предполагают, что я лучше разбираюсь в программировании, чем я, или у меня было много ошибок, которые я недостаточно хорошо знаю, чтобы понять, поэтому я не смог их включить. Мне удалось заставить индикатор выполнения работать, но поскольку файлы были меньше мегабайта, и при неудачной загрузке отображался только пустой индикатор выполнения, это было не идеально. Я надеюсь, что кто-нибудь может помочь мне отобразить сбой или успех.

 IntentFilter filter = new IntentFilter(DownloadManager.ACTION_DOWNLOAD_COMPLETE);
   BroadcastReceiver receiver = new BroadcastReceiver() {
       @Override
       public void onReceive(Context context, Intent intent) {
           Toast.makeText(MainActivity.this, "Your download is complete.", Toast.LENGTH_SHORT).show();
       }
   };

   @Override
   public void onClick(View view) {

       registerReceiver(receiver, filter);

       int id = view.getId();
       if (id == R.id.myfile) {
           DownloadManager dm = (DownloadManager) getSystemService(DOWNLOAD_SERVICE);
           DownloadManager.Request request1 = new DownloadManager.Request(
                   Uri.parse("https://myurl.zip"));
           request1.setDestinationInExternalPublicDir(Environment.DIRECTORY_DOWNLOADS, "/mydir/myfile.zip");
           dm.enqueue(request1);
           Toast.makeText(MainActivity.this, "Your chose myfile.zip", Toast.LENGTH_SHORT).show();
       } else if (id == R.id.myfile2) {
           DownloadManager dm;
           dm = (DownloadManager) getSystemService(DOWNLOAD_SERVICE);
           DownloadManager.Request request2 = new DownloadManager.Request(
                   Uri.parse("https://myurl2.zip"));
           request2.setDestinationInExternalPublicDir(Environment.DIRECTORY_DOWNLOADS, "/mydir2/myfile2.zip");
           dm.enqueue(request2);
           Toast.makeText(MainActivity.this, "You chose myfile2.zip.", Toast.LENGTH_SHORT).show();
       }
   }
}
  

Комментарии:

1. Вы ничего не делаете с параметром намерения onReceive(). Попробуйте long downloadId = intent.getLongExtra(DownloadManager.EXTRA_DOWNLOAD_ID, 0);

2. Спасибо за совет, я пытаюсь использовать downloadId сейчас.

Ответ №1:

Я подумал, что должен опубликовать свое решение моей проблемы в надежде, что это может помочь кому-то в подобной ситуации. В конечном итоге я отказался от DownloadManager в пользу быстрой сетевой библиотеки Android от https://github.com/amitshekhariitbhu/Fast-Android-Networking . Я уверен, что был способ достичь моей цели с помощью DownloadManager, но это сработало для меня. Вот пример получения всплывающего сообщения об успехе или сбое при загрузке файла. Статус выполнения в этом примере не используется.

 @Override
    public void onClick(View view) {

        int id = view.getId();

        if (id == R.id.example) {
            Toast.makeText(MainActivity.this, "You chose The example.", Toast.LENGTH_SHORT).show();
            AndroidNetworking.download("https://example.github.io/repository.0.3.1.zip",Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_DOWNLOADS).getPath()   "/example", "/repository.0.3.1.zip")
                .setTag("Download")
                .setPriority(Priority.MEDIUM)
                .build()
                .setDownloadProgressListener(new DownloadProgressListener() {
                    @Override
                    public void onProgress(long bytesDownloaded, long totalBytes) {
                    }
                })
                .startDownload(new DownloadListener() {
                    @Override
                    public void onDownloadComplete() {
                        Toast.makeText(MainActivity.this, "The download is complete.", Toast.LENGTH_SHORT).show();
                    }
                    @Override
                    public void onError(ANError error) {
                        Toast.makeText(MainActivity.this, "The download failed.", Toast.LENGTH_SHORT).show();
                    }
                });