有没有一种方法可以使用Android中的DownloadManager通过LAN下载?

时间:2019-03-27 03:50:01

标签: android android-5.0-lollipop lan android-download-manager

我正在开发一个需要在android电视上播放视频列表的应用。首先,我通过流传输来播放视频,同时还开始下载视频。当已经下载了特定的视频并且需要播放该视频时,我将使用该下载的视频文件并进行播放。在使用WIFI连接的设备(例如我用于测试的平板电脑)上,正在下载视频。但是我需要运行我的应用程序的电视正在使用LAN连接。是否有解决此问题的方法?

当前,这就是我开始下载的方式。

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 个答案:

答案 0 :(得分:1)

一个潜在的解决方案是获取所需的网络,并通过连接管理器将您的进程绑定到该网络。参见bindProcessToNetwork。您可以通过getAllNetworks()遍历它们来获取所需的网络,并检查网络信息是否与您想要的网络信息匹配。

答案 1 :(得分:1)

对于电视,“ 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)));

如果此代码适用于电视,则需要进行检查(如果是电视)并相应地处理代码。