0

我一直在尝试使用我的 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>

4

1 回答 1

0

我知道回答这个问题已经很长时间了,但我是通过与 DLNA 和 UPNP 合作来解决这个问题的。我决定回答这个问题,以便它对其他STACKERS (:P) 有用。如果您可以使用 DLNA,这里是您可以用来实现您的要求的代码。它还支持 UPNP。

它使用搜索栏来显示当前正在运行的媒体的进度。希望你能找到你的要求。

基本上,您需要使用getPositionInfo()来自 upnp 服务的回调。您可以在每个特定持续时间(例如 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);

要使用 seekbar 更新播放器,请将 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());

而已!

于 2018-02-22T04:41:07.937 回答