我一直在尝试用我的UPnP Android应用程序实现Seek(),但没有成功。
我有我的搜索栏和听众,但是当我将搜索栏拖到一个新位置时它仍然失败。
seekbar.setOnSeekBarChangeListener(new OnSeekBarChangeListener()
{
@Override
public void onProgressChanged(SeekBar arg0, int arg1, boolean arg2)
{
Log.i("SEEKTIME", "time:" + arg1);
upnpService.getControlPoint().execute(new Seek(service, SeekMode.REL_TIME, arg0.toString())
{
@Override
public void success(ActionInvocation invocation)
{
//super.success(invocation);
Log.i("SEEKSUCCESS", "success seek");
}
@Override
public void failure(ActionInvocation arg0, UpnpResponse arg1, String arg2)
{
Log.i("SEEKFAIL", "fail seek");
}
});
}
当我拖动到搜索栏上的新位置时,它会触发失败方法。
任何想法???
我使用BubbleUPnP作为渲染器。设备XML如下所示。
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<root xmlns="urn:schemas-upnp-org:device-1-0">
<specVersion>
<major>1</major>
<minor>0</minor>
</specVersion>
<device>
<deviceType>urn:schemas-upnp-org:device:MediaRenderer:1</deviceType>
<UDN>uuid:2797d98f-173f-fe46-0000-00002d731080</UDN>
<friendlyName>BubbleUPnP (Nexus One)</friendlyName>
<manufacturer>Bubblesoft</manufacturer>
<manufacturerURL>http://forum.xda-developers.com/showthread.php?t=1118891
</manufacturerURL>
<modelDescription>BubbleUPnP Media Renderer</modelDescription>
<modelName>BubbleUPnP Media Renderer</modelName>
<modelNumber>1.4.3.1</modelNumber>
<modelURL />
<iconList>
<icon>
<mimetype>image/png</mimetype>
<width>72</width>
<height>72</height>
<depth>32</depth>
<url>/dev/2797d98f-173f-fe46-0000-00002d731080/icon.png</url>
</icon>
</iconList>
<serviceList>
<service>
<serviceType>urn:schemas-upnp-org:service:AVTransport:1
</serviceType>
<serviceId>urn:upnp-org:serviceId:AVTransport</serviceId>
<controlURL>/dev/2797d98f-173f-fe46-0000-00002d731080/svc/upnp-org/AVTransport/action
</controlURL>
<eventSubURL>/dev/2797d98f-173f-fe46-0000-00002d731080/svc/upnp-org/AVTransport/event
</eventSubURL>
<SCPDURL>/dev/2797d98f-173f-fe46-0000-00002d731080/svc/upnp-org/AVTransport/desc.xml
</SCPDURL>
</service>
<service>
<serviceType>urn:schemas-upnp-org:service:RenderingControl:1
</serviceType>
<serviceId>urn:upnp-org:serviceId:RenderingControl</serviceId>
<controlURL>/dev/2797d98f-173f-fe46-0000-00002d731080/svc/upnp-org/RenderingControl/action
</controlURL>
<eventSubURL>/dev/2797d98f-173f-fe46-0000-00002d731080/svc/upnp-org/RenderingControl/event
</eventSubURL>
<SCPDURL>/dev/2797d98f-173f-fe46-0000-00002d731080/svc/upnp-org/RenderingControl/desc.xml
</SCPDURL>
</service>
<service>
<serviceType>urn:schemas-upnp-org:service:ConnectionManager:1
</serviceType>
<serviceId>urn:upnp-org:serviceId:ConnectionManager</serviceId>
<controlURL>/dev/2797d98f-173f-fe46-0000-00002d731080/svc/upnp-org/ConnectionManager/action
</controlURL>
<eventSubURL>/dev/2797d98f-173f-fe46-0000-00002d731080/svc/upnp-org/ConnectionManager/event
</eventSubURL>
<SCPDURL>/dev/2797d98f-173f-fe46-0000-00002d731080/svc/upnp-org/ConnectionManager/desc.xml
</SCPDURL>
</service>
</serviceList>
</device>
答案 0 :(得分:0)
我知道答案已经很长时间了,但我通过与DLNA和UPNP合作来解决这个问题。我决定回答这个问题,以便它对其他 STACKERS (:P)有用。如果您可以使用DLNA,here是您可以用来满足您的要求的代码。它还支持UPNP。
使用搜索栏显示当前正在运行的媒体的进度。希望你能找到你的要求。
基本上,您需要使用upnp服务的getPositionInfo()
回调。您可以在每个特定的持续时间内请求此回调,例如500毫升。这是回调:
try {
Service localService = this.executeDeviceItem.getDevice()
.findService(new UDAServiceType("AVTransport"));
if (localService != null) {
this.upnpService.getControlPoint().execute(
new GetPositionInfoCallback(localService, mHandle,
this.activity));
} else {
}
} catch (Exception localException) {
localException.printStackTrace();
}
您可以根据回调返回的数据更新搜索栏。像这样:
Bundle localBundle = paramIntent.getExtras();
String str1 = localBundle.getString("TrackDuration");
String str2 = localBundle.getString("RelTime");
int i = com.techd.tvapp.util.Utils.getRealTime(str1);
int j = Utils.getRealTime(str2);
mSeekBar.setMax(i);
mSeekBar.setProgress(j);
mTotalTime.setText(str1);
mCurrentTime.setText(str2);
要使用搜索栏更新播放器,请将seekbarchange侦听器设置为:
class PlaySeekBarListener implements SeekBar.OnSeekBarChangeListener {
PlaySeekBarListener() {
}
public void onProgressChanged(SeekBar paramSeekBar, int paramInt,
boolean paramBoolean) {
}
public void onStartTrackingTouch(SeekBar paramSeekBar) {
// isUpdatePlaySeek = false;
}
public void onStopTrackingTouch(SeekBar paramSeekBar) {
if (null != dmcControl) {
String str = com.techd.tvapp.util.Utils.secToTime(paramSeekBar.getProgress());
Log.i("DMC", "SeekBar time:" + str);
dmcControl.seekBarPosition(str);
}
}
}
mSeekBar = (SeekBar) findViewById(R.id.media_seekBar);
mSeekBar.setOnSeekBarChangeListener(new PlaySeekBarListener());
就是这样!