Android 音乐投放dlna DMS功能实现

来源:互联网 发布:手机号以前注册过淘宝 编辑:程序博客网 时间:2024/06/07 18:22

Android 音乐投放dlna DMS功能实现

1、功能说明

         在安卓设备上实现音频dlna DMS投放:安卓设备做主设备,把本地音频投放到dlna协议的设备上播放;
         主要功能:1)搜索当前网络上有没有dlna设备;
                             2)读取本地音频文件;
                             3)音频播放、暂停、下一首、上一首、音量控制。


2、功能

      1)搜索dlna设备

调用服务连接

private void initConnection() {connection = new ServiceConnection() {public void onServiceConnected(ComponentName arg0, IBinder arg1) {manageDLNA.setUpnpService((AndroidUpnpService) arg1); // 获得服务对象manageDLNA.getListInfo().clear();InetAddress inetAddress = getLocalIpAddress(MainActivity.this);if (manageDLNA.getMediaServer() == null && inetAddress != null) {try {mediaServer = new MediaServer(inetAddress);manageDLNA.setMediaServer(mediaServer);} catch (ValidationException e) {e.printStackTrace();}}manageDLNA.getUpnpService().getRegistry().addDevice(manageDLNA.getMediaServer().getDevice());manageDLNA.addServiceDevices(manageDLNA.getMediaServer().getDevice());manageDLNA.prepareMediaServer(MainActivity.this);// 绑定接口manageDLNA.getUpnpService().getRegistry().addListener(registryListener);// 开始搜索设备manageDLNA.getUpnpService().getControlPoint().search();showProgressDialog();}public void onServiceDisconnected(ComponentName arg0) {manageDLNA.setCuurentInfo(null);manageDLNA.setUpnpService(null);manageDLNA.setServerPrepared(false);}};}
监听接口
class BrowseRegistryListener extends DefaultRegistryListener {@Overridepublic void remoteDeviceAdded(Registry registry, RemoteDevice device) {String Type = device.getType().getType();if(Type.equalsIgnoreCase("MediaServer")){manageDLNA.addServiceDevices(device);//changDMSdata(0);handler.sendEmptyMessage(0);//manageDLNA.addServiceDevices(manageDLNA.getMediaServer().getDevice());//handler.sendEmptyMessage(0);}if(Type.equalsIgnoreCase("MediaRenderer")){manageDLNA.addDevices(device);//changDMRdata(0);handler.sendEmptyMessage(1);String dd = device.getIdentity().getUdn().toString();String ggg = device.getIdentity().getDescriptorURL().toString();String nn = device.getDetails().getFriendlyName(); }}@Overridepublic void remoteDeviceRemoved(Registry registry, RemoteDevice device) {String Type = device.getType().getType();if(Type.equalsIgnoreCase("MediaServer")){manageDLNA.deleteServiceDevices(device);//changDMSdata(1);handler.sendEmptyMessage(2);}if(Type.equalsIgnoreCase("MediaRenderer")){manageDLNA.deleteDevices(device);//changDMRdata(1);handler.sendEmptyMessage(3);}}@Overridepublic void localDeviceAdded(Registry registry, LocalDevice device) {String Type = device.getType().getType();if(Type.equalsIgnoreCase("MediaServer")){manageDLNA.addServiceDevices(device);//changDMSdata(0);handler.sendEmptyMessage(0);}if(Type.equalsIgnoreCase("MediaRenderer")){manageDLNA.addDevices(device);changDMRdata(0);}}@Overridepublic void localDeviceRemoved(Registry registry, LocalDevice device) {String Type = device.getType().getType();if(Type.equalsIgnoreCase("MediaServer")){manageDLNA.deleteServiceDevices(device);changDMSdata(1);}if(Type.equalsIgnoreCase("MediaRenderer")){manageDLNA.deleteDevices(device);changDMRdata(1);}}}
添加设备
private void changDMSdata(int o){if(o == 0){if(adapterDMS != null){        if(listServiceInfo != null){             for(int i = 0; i < ManageDLNA.getInstance().getSerListInfo().size(); i++){            if(!listServiceInfo.contains(ManageDLNA.getInstance().getSerListInfo().get(i))){            listServiceInfo.add(ManageDLNA.getInstance().getSerListInfo().get(i));            }            }          adapterDMS.setData(listServiceInfo);          adapterDMS.notifyDataSetChanged();            }            }}else if(o == 1){if(adapterDMS != null){        if(listServiceInfo != null){               for(int i = 0; i < listServiceInfo.size(); i++){              if(!ManageDLNA.getInstance().getSerListInfo().contains(listServiceInfo.get(i))){                               listServiceInfo.remove(i);              }              }              adapterDMS.setData(listServiceInfo);              adapterDMS.notifyDataSetChanged();              }            }}}private void changDMRdata(int o){if(o == 0){if(adapter != null){            if(listDeviceInfo != null){             for(int i = 0; i < ManageDLNA.getInstance().getListInfo().size(); i++){            if(!listDeviceInfo.contains(ManageDLNA.getInstance().getListInfo().get(i))){          DeviceInfo dd = manageDLNA.getListInfo().get(i);//            listDeviceInfo.add(ManageDLNA.getInstance().getListInfo().get(i));          listDeviceInfo.add(dd);            }            }            adapter.setData(listDeviceInfo);            adapter.notifyDataSetChanged();            }            }}else if(o == 1){if(adapter != null){              if(listDeviceInfo != null){               for(int i = 0; i < listDeviceInfo.size(); i++){              if(!ManageDLNA.getInstance().getListInfo().contains(listDeviceInfo.get(i))){              if(!"Local Play".equals(listDeviceInfo.get(i).getName()))              listDeviceInfo.remove(i);              }              }              adapter.setData(listDeviceInfo);              adapter.notifyDataSetChanged();              }              }}}

2)读取本地文件

OnItemClickListener contentItemClickListener = new OnItemClickListener() {@Overridepublic void onItemClick(AdapterView<?> parent, View v, int position,long id) {// TODO Auto-generated method stub  /storage/sdcard0/kgmusic/download/张学友 - 一路上有你.mp3ContentItem content = contentListAdapter.getItem(position);if (content.isContainer()) {manageDLNA.getUpnpService().getControlPoint().execute(new ContentBrowseActionCallback(MainActivity.this,content.getService(), content.getContainer(),contentListAdapter));onback.add(content);}else {if(DMSSelect != -1 && DMRSelect != -1){Intent intent = new Intent();intent.setClass(MainActivity.this, GPlayer.class);intent.putExtra("DMSSelect", DMSSelect);intent.putExtra("DMRSelect", DMRSelect);intent.putExtra("audio", position);intent.putExtra("title", content.toString());ArrayList<String>  url = new ArrayList<String>();for(int i = 0,l = contentListAdapter.getCount();i<l;i++){url.add(contentListAdapter.getItem(i).getItem().getFirstResource().getValue());}intent.putExtra("playURI", contentListAdapter.getItem(position).getItem().getFirstResource().getValue());intent.putStringArrayListExtra("contentListAdapter", url);startActivity(intent);}}}};
3)音频播放、暂停、下一首、上一首、音量控制
public boolean beginPlay(Service mediaRender) {ControlPoint controlPoint = ManageDLNA.getInstance().getUpnpService().getControlPoint();if (mediaRender == null) {return false;}controlPoint.execute(new Play(mediaRender){public void success(ActionInvocation invocation) {System.out.println("success~~~~~~~~~~success");}public void failure(ActionInvocation arg0, UpnpResponse arg1,String arg2) {System.out.println("failure~~~~~~~~~~failure3333333");}});System.out.println("pauseMuisc~~~~~~~~pauseMuisc222");return false;}public boolean stopMuisc(Service mediaRender) {ControlPoint controlPoint = ManageDLNA.getInstance().getUpnpService().getControlPoint();if (mediaRender == null) {return false;}controlPoint.execute(new Stop(mediaRender){public void success(ActionInvocation invocation) {}public void failure(ActionInvocation arg0, UpnpResponse arg1,String arg2) {System.out.println("failure~~~~~~~~~~failure");}}); return false;}public boolean pauseMuisc(Service mediaRender) {ControlPoint controlPoint = ManageDLNA.getInstance().getUpnpService().getControlPoint();if (mediaRender == null) {return false;}controlPoint.execute(new Pause(mediaRender){public void failure(ActionInvocation arg0, UpnpResponse arg1,String arg2) {System.out.println("failure~~~~~~~~~~failure3333333");}});System.out.println("pauseMuisc~~~~~~~~pauseMuisc222");return false;}

        


demo 下载:http://download.csdn.net/download/workwayli/10113142
原创粉丝点击