在一个工程(包)下面让activity和SensorEventListener监听分离,在不同类中完成
两个类:
1、SensorTest类,是Acvitivity
2、SensorListenerTest类,实现了SensorEventListener类,
SensorTest.java:
import android.app.Activity;
import android.os.Bundle;
public class SensorTest extends Activity {
/** Called when the activity is first created. */
SensorListenerTest sensorListenerTest;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
// 传参数的时候,用this,不是自己新建的Context
sensorListenerTest = new SensorListenerTest(this);
}
// 添加OnResume和OnStop,注册和取消Sensor服务。
@Override
protected void onResume() {
// 监听服务,在activity和Listener里面都要注册,这是一个难点。不要只在一个地方注册。
// TODO Auto-generated method stub
super.onResume();
sensorListenerTest.enableSensor();
}
@Override
protected void onStop() {
// TODO Auto-generated method stub
super.onStop();
sensorListenerTest.disableSensor();
}
}
SensorListenerTest.java
import android.content.Context;
import android.hardware.Sensor;
import android.hardware.SensorEvent;
import android.hardware.SensorEventListener;
import android.hardware.SensorManager;
import android.util.Log;
public class SensorListenerTest implements SensorEventListener {
private SensorManager mSensorManager;
private Sensor sensor;
private float mLastX, mLastY, mLastZ;
private Context mContext;
public SensorListenerTest(Context context) {
mContext = context;
// 在构造函数里面注册Sensor服务
enableSensor();
}
// 注册传感器服务,在本java和Activity里面都要注册,但是取消注册的时候,只在activity里面取消注册即可。
public void enableSensor() {
// 在这里真正注册Service服务
mSensorManager = (SensorManager) mContext
.getSystemService(Context.SENSOR_SERVICE);
sensor = mSensorManager.getDefaultSensor(Sensor.TYPE_ACCELEROMETER);
if (mSensorManager == null) {
Log.v("sensor..", "Sensors not supported");
}
mSensorManager.registerListener(this, sensor,
SensorManager.SENSOR_DELAY_NORMAL);
}
// 取消注册传感器服务
public void disableSensor() {
if (mSensorManager != null) {
mSensorManager.unregisterListener(this);
mSensorManager = null;
}
}
@Override
public void onAccuracyChanged(Sensor arg0, int arg1) {
// TODO Auto-generated method stub
}
@Override
public void onSensorChanged(SensorEvent event) {
// TODO Auto-generated method stub
if (event.sensor == null) {
return;
}
if (event.sensor.getType() == Sensor.TYPE_ACCELEROMETER) {
mLastX = event.values[SensorManager.DATA_X];
mLastY = event.values[SensorManager.DATA_Y];
mLastZ = event.values[SensorManager.DATA_Z];
String sX = String.valueOf(mLastX);
String sY = String.valueOf(mLastY);
String sZ = String.valueOf(mLastZ);
Log.v("mLastX==", sX);
Log.v("mLastY==", sY);
Log.v("mLastZ==", sZ);
}
}
}
这样,显示如下图:
总结:在普通的java类里面,获得SensorManager的服务和具体的Sensor,
不像在activity里面(不需要context作为参数,就可以直接获取),
所以用构造函数的context作为参数,让它获得SensorManager的服务和具体的Sensor,在activity里面,传递的context参数,不是像普通的java类那样定义一个context,而是传递this。这点需要注意。
再一个,注册Sensor服务:
1、在普通的java类里面,在构造函数里面执行注册Sensor,这样能够保证用这个java类的时候,Sensor服务就能启动,
2、在activity里面,也要注册Sensor,1、2的注册缺一不可,这个也是一个弄了很久才知道的。至于activity注册Sensor,常在程序刚开始执行的时候,就注册。常在OnResume里面执行注册。
转载于:https://www.cnblogs.com/snowdrop/articles/1802092.html
在一个工程(包)下面让activity和SensorEventListener监听分离,在不同类中完成相关推荐
- Day2多种抓包工具介绍以及使用封包监听工具找到挑战数据包实现发送数据包进行挑战
工具相关证书安装指南 Charles https://blog.csdn.net/weixin_45459427/article/details/108393878 Fidder https://bl ...
- 抓包工具Fiddler使用(主要用于监听APP对外访问请求)
一.介绍 本人最近在做android开发,有时会遇到线上APP版本显示的数据"不符合预期",查找问题时,特别需要查看一下请求参数是否有问题,但是直接通过线上日志又不是很方便,如果此 ...
- [Android]Fragment自定义动画、动画监听以及兼容性包使用
Fragment是Android在API 11之后加入的一个组件,对提高Android开发中的布局合理性和布局效率都有很大作用,尤其是在Android平板等大屏幕设备的开发中,Fragment的引入能 ...
- wireshark提取流量包中的文件_从Wireshark监听的数据中提取需要的数据
最近,需要将wireshark监听的数据进行提取,分两步:首先,应该得出wireshark的数据包吧,在图形化界面中可以非常直观的将监听数据进行存储,但是这样需要手动操作非常麻烦,而且容易出错(随着处 ...
- Android Activity 生命周期详解及监听
前言 系列文章: Android Activity 与View 的互动思考 Android Activity 生命周期详解及监听 Android onSaveInstanceState/onResto ...
- 如何使用Jpcap 包实现网络监听
实现的代码如下(这里提供几个重要的类) /** @(#)ARP.java ARP类 用于解析目标主机IP的地址为相应的MAC地址 @author scholar_ii @version 1.00 20 ...
- 【Android 插件化】Hook 插件化框架总结 ( 插件包管理 | Hook Activity 启动流程 | Hook 插件包资源加载 ) ★★★
Android 插件化系列文章目录 [Android 插件化]插件化简介 ( 组件化与插件化 ) [Android 插件化]插件化原理 ( JVM 内存数据 | 类加载流程 ) [Android 插件 ...
- 1、IDEA中如何在一个工程下创建多个模块
文章目录 前言 一.步骤 1.先创建一个空的工程 2.再创建模块(Module) 总结 IDEA中工程和模块之间的区别: 前言 既然是在一个工程下创建多个模块,毋庸置疑,肯定先创建一个工程(Proje ...
- adb 查看当前包名和Activity
1.先启动服务 2.如果你是mac系统输入下面命令: adb shell dumpsys window | grep mCurrentFocus 如果你是window输入下面命令: adb shell ...
最新文章
- 【转】C#解析HTML
- 如何使用资源和样式调整控件外观
- 人工智能:各种知识收集----不断追加内容
- k8s 服务发现:通过CoreDNS域名访问service服务
- 南卫理公会大学计算机科学,南卫理公会大学哪个专业好?
- (2) ebj学习:hello world入门案例
- java空格 逗号_Java将字符串中的空格换为逗号
- 商海致富独家秘诀:微笑可以当钱花
- Ubuntu安装搭建Clion环境
- Linux命令之useradd和userdel(添加、删除用户)
- 基于JAVA+SpringBoot+Mybatis+Vue+MYSQL的智慧养老管理系统
- 中国已与36个国家(地区)海关实现“经认证的经营者”(AEO)互认
- 如何在aspx页面中插入swf动画
- 企业安全三步走 惠普重新思考安全战略
- cisco2811(Cisco2811 DHCP)
- vue项目PC端如何适配不同分辨率屏幕
- java桌面应用开发利器JavaFx
- Opencv中,imag=cv2.cvtColor(imag,cv2.COLOR_BGR2GRAY) 报错:error:!_src.empty() in function ‘cv::cvtColor‘
- 未连接到互联网的解决方法(chrome)
- nb信号和4g信号_NB-IoT的同步信号解析
热门文章
- Exchange Reporter Plus概述
- AD账户频繁被锁定-开启日志审核策略
- 云服务器 ECS > 网络 > 经典网络迁移至专有网络
- vSphere Datacenter设计– vSphere 6.0中的vCenter体系结构更改–第1部分
- 使用vSphere Web Client导出/导入/还原分布式交换机配置(2034602)
- 我是如何将系统QPS从300提升到6000的
- Java Web学习总结(33)——Java Web 程序员如何转型大数据
- oracle数据库stuff的用法,sql STUFF用法
- lisp的vla函数画矩形_利用Lisp做Tin三角网建模(源代码)
- 洞察CRM对企业的真正价值