我正在开发一个需要在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
。我不能在电视上尝试它,因为它在另一栋建筑物上。
答案 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)));
如果此代码适用于电视,则需要进行检查(如果是电视)并相应地处理代码。