我正在开发一款需要在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
。我不能在电视上试试,因为它在不同的建筑物上。
一种可能的解决方案是获取所需的网络,并通过连接管理器将您的流程绑定到此网络。见bindProcessToNetwork。您可以通过getAllNetworks()迭代它们获取所需的网络,并检查网络信息是否与您想要的网络信息相匹配。
对于电视,“网络移动”不起作用。我建议删除它并尝试使用下面提到的代码: -
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)));
如果此代码适用于电视,则需要应用支票(如果是电视)并相应地处理代码。