Android 音乐投放dlna DMS功能实现

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 {
		@Override
		public 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(); 
			}			
		}

		@Override
		public 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);
			}
		}

		@Override
		public 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);
			}
		}

		@Override
		public 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() {

		@Override
		public void onItemClick(AdapterView<?> parent, View v, int position,
				long id) {
			// TODO Auto-generated method stub  /storage/sdcard0/kgmusic/download/张学友 - 一路上有你.mp3
			ContentItem 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
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值