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
阅读全文
0 0
- Android 音乐投放dlna DMS功能实现
- DLNA,DMS介绍
- DLNA,DMS介绍
- ios 中使用DLNA搜索dms设备
- android 音乐播放器功能实现
- 利用 android手机DLNA功能,实现手机视频无线播放到电脑、电视
- Dlna音乐播放器
- 基于DLNA实现iOS、Android投屏:基本概念
- 基于DLNA实现iOS、Android投屏:基本概念
- 基于DLNA实现iOS、Android投屏:基本概念
- Android下DLAN中DMS模块的实现
- Android下DLAN中DMS模块的实现
- 基于Platinum库的DMS实现(android)
- Android下DLAN中DMS模块的实现
- 基于Platinum库的DMS实现(android)
- 基于Platinum库的DMS实现(android)--Server
- 关于什么是DLNA, 什么是DMS的详细介绍
- 关于什么是DLNA, 什么是DMS的详细介绍
- 【zookeeper】ACL super 超级管理员
- Git 使用,分支创建,提交,合并,只能提交文件夹
- 1010二次方程求根3_2
- BZOJ3573 [Hnoi2014]米特运输
- BZOJ1911[Apio2010]特别行动队(洛谷P3628)
- Android 音乐投放dlna DMS功能实现
- 带着问题了解Openstack Neutron安全组
- sqoop 安装
- CSS——解决hover离开时效果突然消失的问题
- glut教程--基本的启动建立窗口的简单渲染图形例子
- CLLocationManager定位不准确,在国内存在偏移
- Android的productFlavor使用
- 均衡算法LMS 概述
- ButterKnife使用出现Nullpointerexception