UpnpDemo_发布设备和服务
来源:互联网 发布:淘宝网上海故事 编辑:程序博客网 时间:2024/04/27 20:47
//主控类,将注册设备和服务,并实现业务逻辑
public class LightActivity extends Activity implements PropertyChangeListener{
private AndroidUpnpService upnpService;
private UDN udn = new UDN(UUID.randomUUID());
private ServiceConnection serviceConnection = new ServiceConnection(){
@Override
public void onServiceConnected(ComponentName className, IBinder service){
upnpService=(AndroidUpnpService)service;
//非首次,直接拿取服务
LocalService<SwitchPower> switchPowerService=getSwitchPowerService();
//如果是首次,那么要创建设备—注册设备—拿取服务
if(switchPowerService==null){
try{
LocalDevice binaryLightDevice=createDevice();
upnpService.getRegistry().addDevice(binaryLightDevice);
switchPowerService=getSwitchPowerService();
}catch(Exception e){
e.printStackTrace();
}
}
//初始化业务(灯泡状态)
setLightBulb(switchPowerService.getManager().getImplementation().getStatus());
//绑定业务事件监听:监听状态值的改变(以改变灯泡状态)
switchPowerService.getManager().getImplementation().getPropertyChangeSupport().addPropertyChangeListener(this);
}
@Override
public void onServiceDisconnected(ComponentName className){
upnpService=null;
}
}
@Override
public void onCreate(Bundle savedInstance){
super.onCreate(savedInstance);
setContentView(R.layout.light);
//绑定服务:无论服务端还是控制端都绑定AndroidUpnpServiceImpl或其子类(UPNP下的点都是对等的,服控之分只是根据具体需求人为界定)
getApplicationContext().bindService(new Intent(this,AndroidUpnpServiceImpl.class),serviceConnection,Context.BIND_AUTO_CREATE);
}
//创建设备
private LocalDevice createDevice() throws Exception{
//设备类型
DeviceType type=new UDADeviceType("BinaryLight",1);
//设备详情
DeviceDetails details=new DeviceDetails(
"FriendlyBinaryLight",
new ManufactuererDetais("MicroSoft"),
new ModelDetais("AndroidLight","a light with remote control.","v1")
);
//搭载服务
LocalService service=new AnnotationLocalServiceBinder().read(SwitchPower.class);
service.setManager(new DefaultServiceManager<SwitchPower>(service,SwitchPower.class));
//返回该伟大设备
return new LocalDevice(
new DeviceIdentity(udn),
type,
details,
createDeviceIcon(),
service
);
}
//(由设备中)拿取服务
private LocalService<SwitchPower> getSwitchPowerService(){
//老大为空,返回空
if(upnpService==null){
return null;
}
//设备为空,返回空
LocalDevice localDevice;
if((localDevice=upnpService.getRegistry().getLocalDevice(udn,true))==null){
return null;
}
//由设备中拿取服务并返回
LocalService localService=(LocalService<SwitchPower>)localDevice.findService(new UDAServiceType("SwitchPower",1));
return localService;
}
private Icon createDeviceIcon(){
Icon icon=null;
try{
icon=new Icon("image/png",48,48,8,new URI("icon.png"),"一个极长、且纯洁、且无足重轻的——String data!!!");
}catch(Exception e){
e.printStackTrace();
}
return icon;
}
----------------------------------------------------------------------------------------------------------------------------------------
//业务事件监听
@Override
public void propertyChange(PropertyChangeEvent event) {
if (event.getPropertyName().equals("status")) {
setLightbulb((Boolean) event.getNewValue());
}
}
//业务方法
private void setLightbulb(final boolean on) {
runOnUiThread(new Runnable() {
public void run() {
ImageView imageView = (ImageView) findViewById(R.id.light_imageview);
imageView.setImageResource(on ? R.drawable.light_on: R.drawable.light_off);
imageView.setBackgroundColor(on ? Color.parseColor("#9EC942"): Color.WHITE);
}
});
}
-----------------------------------------------------------------------------------------------------------------------------------------
//一点添头,重置路由器
@Override
public boolean onCreateOptionsMenu(Menu menu) {
menu.add(0, 0, 0, R.string.switchRouter).setIcon(android.R.drawable.ic_menu_revert);
return true;
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
switch (item.getItemId()) {
case 0:
if (upnpService != null) {
SwitchableRouter router = (SwitchableRouter) upnpService.get().getRouter();
try {
if (router.isEnabled()) {
router.disable();
} else {
router.enable();
}
} catch (Exception e) {
e.printStackTrace();
}
}
break;
}
return false;
}
}
0 0
- UpnpDemo_发布设备和服务
- UpnpDemo_搜索设备和服务
- UpnpDemo_定义服务
- UpnpDemo_调用服务
- 黑莓发布企业服务SWS 兼容Android和iOS设备
- 设备驱动程序和服务
- 服务发布和发现
- GeoServer安装和发布服务
- 服务的发布和引用
- Redis-发布和订阅服务
- ADSP设备驱动和系统服务简介
- ADSP设备驱动和系统服务简介
- 基于ArcIMS和JSP发布地图服务
- OSGI:服务的发布和引用
- javaProject打包和服务发布解决方案
- OSGi服务发布和获取方式
- WCF系列:服务的发布和使用
- 使用XFire发布和调用web服务
- Java poi Excel 文字缩进处理
- Android中网络通信方式的简单汇总(HttpURLConnection、HttpClient、Socket等)
- UpnpDemo_定义服务
- python_lambda函数
- kobject和uevent的一点想法--待续
- UpnpDemo_发布设备和服务
- (解题报告)HDU2020---绝对值排序
- 常用的机器学习&数据挖掘知识(点)总结
- UpnpDemo_搜索设备和服务
- 获取网络图片之---三种方式
- UpnpDemo_调用服务
- leetcode之Binary Tree Level Order Traversal II
- (解题报告)HDU2021---发工资咯:)
- AsyncTask使用范例