Есть ли способ загрузки по локальной сети с помощью DownloadManager в Android? - PullRequest
2 голосов
/ 27 марта 2019

Я занимаюсь разработкой приложения, которое должно воспроизводить список видео на телевизоре Android.Сначала я проигрываю видео, транслируя его, а также начинаю загрузку видео.Когда конкретное видео уже загружено, и оно должно быть воспроизведено, я использую этот загруженный видеофайл и воспроизводю его.На устройствах (например, планшете, который я использовал для тестирования) с подключением WIFI видео загружаются.Но телевизор, на котором мне нужно запустить свое приложение, использует соединение по локальной сети.Есть ли обходной путь для этой проблемы?

В настоящее время я так и начинаю свои загрузки.

public void startDownload(VideoAd videoAd) {
    String videoUrl = videoAd.getUrl();
    Uri uri = Uri.parse(videoUrl);

    Environment
            .getExternalStoragePublicDirectory(Environment.DIRECTORY_DOWNLOADS)
            .mkdirs();

    lastDownload = dlMgr.enqueue(new DownloadManager.Request(uri)
                        .setAllowedNetworkTypes(DownloadManager.Request.NETWORK_WIFI |
                                DownloadManager.Request.NETWORK_MOBILE)
                        .setAllowedOverRoaming(false)
                        .setTitle("Downloading video ad")
                        .setDescription("Downloading "+getVideoNameFromLink(videoUrl))
                        .setDestinationInExternalPublicDir(Environment.DIRECTORY_DOWNLOADS, getVideoNameFromLink(videoUrl)));


    videoAd.setDownloadId(lastDownload);
}

Это работает.Но проблема в том, что он не работает при подключении к локальной сети.

Это то, что я сейчас использую в своем приложении.

if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.LOLLIPOP) {
    networkArr = connMgr.getAllNetworks();

    Log.d(TAG, "networkArr len: "+networkArr.length);
    for(Network n : networkArr){
        lblNetworks.setText(n.toString()+"\n");
    }
}else{
    // Use getAllNetworkInfo()
    NetworkInfo[] networkInfArr = connMgr.getAllNetworkInfo();

    for(NetworkInfo ni : networkInfArr){
        lblNetworks.setText(ni.toString()+"\n");
    }
}

На моем планшете запущен Lollipop и номер, который я получаю103Я не могу попробовать это по телевизору, потому что он находится в другом здании.

Ответы [ 2 ]

1 голос
/ 27 марта 2019

Для телевидения NETWORK_MOBILE не будет работать.Я бы предложил удалить его и попробовать с приведенным ниже кодом: -

lastDownload = dlMgr.enqueue(new DownloadManager.Request(uri)
                    .setAllowedNetworkTypes(DownloadManager.Request.NETWORK_WIFI)
                    .setTitle("Downloading video ad")
                    .setDescription("Downloading "+getVideoNameFromLink(videoUrl))
                    .setDestinationInExternalPublicDir(Environment.DIRECTORY_DOWNLOADS, getVideoNameFromLink(videoUrl)));

Если этот код работает для телевидения, вам нужно применить проверку (если это телевизор) и обработать код соответствующим образом.

1 голос
/ 27 марта 2019

Одним из возможных решений является получение нужной сети и привязка вашего процесса к этой сети с помощью диспетчера подключений.См. bindProcessToNetwork .Вы можете получить необходимую сеть с помощью getAllNetworks (), выполнить итерацию по ним и проверить, соответствует ли информация о сети необходимой вам сетевой информации.

...