Ошибка Android DownloadManager «Для загрузки требуется сеть»

Я использую DownloadManager для постановки в очередь некоторых загрузок, которые я делаю, но сталкиваюсь с этой проблемой, когда специально пытаюсь использовать соединение Mobile/4G. Я использую телефон Android 2.3.4. Мой код использует API 2.3.3.

Я делаю следующую команду (я хочу заставить соединение использовать 4G/3G)

request.setAllowedNetworkTypes(Request.NETWORK_MOBILE);

Однако всякий раз, когда он пытается загрузить, он помещает загрузку в список DownloadManager, но навсегда остается в статусе «Выполняется», а в верхней части отображается ошибка «Для загрузки требуется сеть».

Когда я продолжаю расследование и подключаю свое устройство для просмотра журналов в logcat, я вижу следующую ошибку при попытке загрузки:

Прерывание запроса на загрузку 92: запрошена загрузка, чтобы не использовать текущий тип сети

У меня есть следующие разрешения:

android.permission.WRITE_OWNER_DATA
android.permission.READ_OWNER_DATA
android.permission.WRITE_EXTERNAL_STORAGE
android.permission.INTERNET    
android.permission.ACCESS_NETWORK_STATE
android.permission.ACCESS_WIFI_STATE 
android.permission.CHANGE_WIFI_MULTICAST_STATE
android.permission.CHANGE_NETWORK_STATE
android.permission.CHANGE_WIFI_STATE  

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

РЕДАКТИРОВАТЬ: я пробовал это на совершенно новом планшете Galaxy, и это поведение, которое я заметил при использовании этого устройства: когда Wi-Fi включен и подключен, он не загружается при указании использования NETWORK_MOBILE. Если Wi-Fi выключен или не подключен, у него нет проблем с использованием соединения 4G. Я думаю, что это функция безопасности, выполняемая устройством, можно ли ее переопределить?


person abeauchamp    schedule 21.12.2011    source источник
comment
Используете ли вы DownloadManager в основном потоке?   -  person coder_For_Life22    schedule 22.12.2011
comment
У меня есть вызывающая активность: Intent i = new Intent(); i.setAction(DownloadManager.ACTION_VIEW_DOWNLOADS); начать активность (я); Кроме того, я безуспешно пытался сделать следующее: ConnectivityManager cm = (ConnectivityManager)getBaseContext().getSystemService(Context.CONNECTIVITY_SERVICE); cm.startUsingNetworkFeature(ConnectivityManager.TYPE_MOBILE, enableHIPRI);   -  person abeauchamp    schedule 22.12.2011
comment
Вы имеете в виду, что используете API 2.3, поскольку DownloadManager не был доступен до уровня API 9 (2.3 Gingerbread)?   -  person Wesley Wiser    schedule 22.12.2011
comment
Да, я использую API уровня 10. Думаю, я должен был сказать это вместо этого, ха-ха. Я имел ввиду использование версии 2.3.3 на телефоне 2.3.4   -  person abeauchamp    schedule 22.12.2011


Ответы (2)


Я не знаю, как вы настраиваете свой менеджер загрузок, но я использовал его в пассе.

private long enqueue;
private DownloadManager dm;

public void onClick(View view) {
    dm = (DownloadManager) getSystemService(DOWNLOAD_SERVICE);
    Request request = new Request(
            Uri.parse("File URL"));
    enqueue = dm.enqueue(request);

}

public void showDownload(View view) {
    Intent i = new Intent();
    i.setAction(DownloadManager.ACTION_VIEW_DOWNLOADS);
    startActivity(i);
}
person coder_For_Life22    schedule 21.12.2011
comment
Да, именно так я его и использую: dm = (DownloadManager)getSystemService(DOWNLOAD_SERVICE); Запрос DownloadManager.Request = новый DownloadManager.Request(ресурс); request.setAllowedNetworkTypes(Request.NETWORK_MOBILE); длинный идентификатор = dm.enqueue (запрос); И я использую тот же метод точного типа, чтобы показать это. - person abeauchamp; 22.12.2011
comment
Спасибо, что просмотрели это вместе со мной. Все работает нормально из DownloadManager, пока я указываю: request.setAllowedNetworkTypes(Request.NETWORK_WIFI); ИЛИ request.setAllowedNetworkTypes(Request.NETWORK_MOBILE | Request.NETWORK_WIFI); Это просто когда я пытаюсь использовать только Request.NETWORK_MOBILE. - person abeauchamp; 22.12.2011

Эта ошибка возникает, когда у вас нет подключения для передачи данных (не имеет значения, подключены ли вы к Wi-Fi или нет). Вы можете указать NETWORK_MOBILE отдельно, но он выдаст вам сообщение об ошибке «Для загрузки требуется сеть», если он попытается выполнить загрузку, когда ваше подключение для передачи данных в настоящее время не работает.

Мой совет, чтобы снова получить подключение для передачи данных, — это ходить, пока вы снова не получите подключение. Я могу сказать, когда у меня есть подключение для передачи данных на моем телефоне Droid Bionic, потому что значки верхней панели с надписью 4G LTE и 4 полосы становятся синими вместо белого.

person abeauchamp    schedule 17.01.2012
comment
Любая ссылка для вашего объяснения? - person Amir; 25.08.2016