有没有办法在Android下使用DownloadManager通过LAN下载?

问题描述 投票:2回答:2

我正在开发一款需要在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);
}

有用。但问题是它在LAN连接上不起作用。

这是我目前在我的应用程序中使用的内容。

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。我不能在电视上试试,因为它在不同的建筑物上。

android android-5.0-lollipop lan android-download-manager
2个回答
1
投票

一种可能的解决方案是获取所需的网络,并通过连接管理器将您的流程绑定到此网络。见bindProcessToNetwork。您可以通过getAllNetworks()迭代它们获取所需的网络,并检查网络信息是否与您想要的网络信息相匹配。


1
投票

对于电视,“网络移动”不起作用。我建议删除它并尝试使用下面提到的代码: -

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)));

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

© www.soinside.com 2019 - 2024. All rights reserved.