首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 移动开发 > Android >

android传感器 android与Service通讯 使用BroadCast发送和接收消息

2013-01-09 
android传感器 android与Service通信 使用BroadCast发送和接收消息由于需要做android传感器(加速度相关)采

android传感器 android与Service通信 使用BroadCast发送和接收消息

由于需要做android传感器(加速度相关)采集应用,而加速度相关信息采集是实时的,显然创建一个Service来单独处理传感器的信息采集是明智之举,而之气没有使用过Service和BroadcastReceiver,因此在前期学习时颇为不顺。


之前参考了一篇文章《Android 传感器应用举例》,无奈有种被坑的感觉:http://wenku.baidu.com/view/ef9bd802a6c30c2259019e8f.html


在编译时出现java.lang.RuntimeException: Unable to instantiate receiver

折腾两天,终于找到问题根源了


被坑原因并不是文章有问题,而是文章中提到的BroadcastReceiver是Activity的内部类,但是文中没有给出AndroidManifest.xml文件,我想当然地认为与普通的服务和广播写法一样。

正确的写法如下文:http://blog.csdn.net/lzg08_08/article/details/8303003


特别注意:Activity创建BroadcastReceiver内部类时要声明为static类,同时在AndroidManifest.xml文件中需要用$标识出内部Receiver。


废话不多说,贴出源码

SensorService.java

BroadcastReceiver accReceiver = new BroadcastReceiver() {@Overridepublic void onReceive(Context context, Intent intent) {Bundle bundle = intent.getExtras();// 获得 BundlexAcceleration = bundle.getDouble("xAcceleration", 0);yAcceleration = bundle.getDouble("yAcceleration", 0);zAcceleration = bundle.getDouble("zAcceleration", 0);currentAcceleration = bundle.getDouble("currentAcceleration", 0);maxAcceleration = bundle.getDouble("maxAcceleration", 0);Log.i("-----------accReceiver---------------", String.valueOf(xAcceleration) + "|" +String.valueOf(xAcceleration) + "|" +String.valueOf(yAcceleration) + "|" +String.valueOf(zAcceleration) + "|" +String.valueOf(currentAcceleration) + "|" +String.valueOf(maxAcceleration) );         }};IntentFilter accFilter = new IntentFilter();accFilter.addAction("com.dm.accReceiver");registerReceiver(accReceiver, accFilter);// 新建并注册广播接收器,用于接收传感器类传递的数据BroadcastReceiver magReceiver = new BroadcastReceiver() {@Overridepublic void onReceive(Context context, Intent intent) {Bundle bundle = intent.getExtras();// 获得 BundleYaw = bundle.getFloat("Yaw", 0);Pitch = bundle.getFloat("Pitch", 0);Roll = bundle.getFloat("Roll", 0);Log.i("-----------magReceiver---------------", String.valueOf(Yaw) + "|" +String.valueOf(Pitch) + "|" +String.valueOf(Roll) );         }};IntentFilter magFilter = new IntentFilter();magFilter.addAction("com.dm.magReceiver");registerReceiver(magReceiver, magFilter);// 启动注册了传感器监听的 ServiceIntent i = new Intent(this, SensorService.class);startService(i);



希望大家在做android传感器项目时不要再犯这样的错误。





热点排行