#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();
}
});