2012-08-10 65 views
0

我一直在試圖用我的UPnP Android應用程序實現尋找(),但沒有成功。UPnP Android應用程序尋找和搜索欄

我有我的seekbar和listener,但是當我將seekbar拖到一個新的位置時它會一直失敗。

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

當我拖動到seekbar上的新位置時,它會觸發失敗方法。

任何想法???

我使用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

尋求什麼?它與你的SeekBar實例或ChangeListener有什麼關係? – wojciii 2012-08-10 11:09:19

+0

這是一個UPnP功能。 – 2012-08-10 11:14:38

+0

獲取AVTransport服務的的XML。找到名稱爲A_ARG_TYPE_SeekMode的serviceStateTable/stateVariable。 REL_TIME必須有一個允許代碼工作的allowedValueList。如果有,那麼你將什麼發送給Seek()作爲一個職位?什麼格式有arg0.toString()?如果調用failure(),那麼UPnPResponse是什麼? – 2012-08-13 14:35:04

回答

0

我知道它已經有很長的時間來回答,但我通過DLNA和UPnP的工作來到了這個問題。我決定回答這個問題,以便它對其他STACKERS(:P)有用。如果您可以使用DLNA,here是您可以用來實現您的要求的代碼。它也支持UPNP。

它使用seekbar來顯示當前正在運行的媒體的進度。希望你能找到你的要求。

基本上,您需要使用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(); 
    } 

您可以根據回調返回的數據更新您的seekbar。事情是這樣的:

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

這就是它!