使用加速度传感器设计微信微信公众号摇一摇抽奖的需求分析怎么写

经验2595 米
在线时间106 小时
版本7.7.15
积分 2765, 距离下一级还需 2235 积分
积分 2765, 距离下一级还需 2235 积分
机型小米MIX
签到次数162
MIUI版本7.7.15
好久没法技术贴了,今天贴一个关于加速度传感器的说明,老话,望多多交流,共同进步。
一 介绍Sensor类
SDK只有一句介绍“Class representing a sensor. Use getSensorList(int) to get the list of available Sensors.”,表示一个感应器的类,可以使用getSensorList方法(此方法属于接下来要讲的SensorManager)获得所有可用的感应器,该方法返回的是一个List&Sensor&
下面的列表显示了,Sensor所提供的所有服务
----------------------------------------------------------------------------------------------------------------------------------------------------------
int& &&&TYPE_ACCELEROMETER& &&&A constant describing an accelerometer sensor type. //三轴加速度感应器 返回三个坐标轴的加速度&&单位m/s2
int& &&&TYPE_ALL& &&&A constant describing all sensor types.& && && && && && && &//用于列出所有感应器
int& &&&TYPE_GRAVITY& &&&A constant describing a gravity sensor type.& && && && && & //重力感应器
int& &&&TYPE_GYROSCOPE& &&&A constant describing a gyroscope sensor type& && && && &//陀螺仪 可判断方向 返回三个坐标轴上的角度
int& &&&TYPE_LIGHT& &&&A constant describing an light sensor type.& && && && && &&&//光线感应器 单位 lux 勒克斯
int& &&&TYPE_LINEAR_ACCELERATION& &&&A constant describing a linear acceleration sensor type.&&//线性加速度
int& &&&TYPE_MAGNETIC_FIELD& &&&A constant describing a magnetic field sensor type.& && && && && &//磁场感应 返回三个坐标轴的数值&&微特斯拉
int& &&&TYPE_ORIENTATION& &&&This constant is deprecated. use SensorManager.getOrientation() instead. //方向感应器 已过时 可以使用方法获得
int& &&&TYPE_PRESSURE& &&&A constant describing a pressure sensor type& && && && && && && && && &&&//压力感应器&&单位 千帕斯卡
int& &&&TYPE_PROXIMITY& &&&A constant describing an proximity sensor type.& && && && && && && && &&&//距离传感器
int& &&&TYPE_ROTATION_VECTOR& &&&A constant describing a rotation vector sensor type.& && && && & //翻转传感器
int& &&&TYPE_TEMPERATURE& &&&A constant describing a temperature sensor type& && && && && && &//温度传感器 单位 摄氏度
----------------------------------------------------------------------------------------------------------------------------------------------------------
此类中包含的方法都是get型的 用来获取所选sensor的一些属性,sensor类一般不需要new而是通过SensorManager的方法获得
二 介绍SensorManager类
SDK解释:“SensorManager lets you access the device's sensors. Get an instance of this class by calling Context.getSystemService() with the argument SENSOR_SERVICE.
Always make sure to disable sensors you don't need, especially when your activity is paused. Failing to do so can drain the battery in just a few hours. Note that the system will not disable sensors automatically when the screen turns off. ”
SensorManager 允许你访问设备的感应器。通过传入参数SENSOR_SERVICE参数调用Context.getSystemService方法可以获得一个sensor的实例。永远记得确保当你不需要的时候,特别是Activity暂定的时候,要关闭感应器。忽略这一点肯能导致几个小时就耗尽电池,注意当屏幕关闭时,系统不会自动关闭感应器。
三 常用的感应器
(1) 加速度感应器
可以通过这个感应器获得三个浮点型
可参阅《android 高级编程2》中的一个插图分析次数据
X Y Z分别对应values[0]到[2]
X表示左右移动的加速度
Y表示前后移动的加速度
Z表示垂直方向的加速度
下面先看一个基本的获取加速的demo,希望大家好好注意代码中的注释
做的很简单,就是在屏幕上显示三个方向上加速度的值,成品效果如下:
556.jpg (37.42 KB, 下载次数: 9)
(151.49 KB, 下载次数: 829)
14:49 上传
点击文件名下载附件
下载积分: 经验 -1 米
测试的时候会发现刷新的特别快,这就引出一个问题,如果真的要呈现在UI中的话,就会不断的绘制界面,非常耗费资源,所以《android高级编程》中给出了一个方案就是引入新的线程来刷新界面,明天有时间的话,尽量把把例子给大家。
分享到微信朋友圈
打开微信,点击底部的“发现”,使用 “扫一扫” 即可将网页分享到我的朋友圈。
经验4644 米
威望620 米
在线时间2221 小时
せんかくしょとう は中国の领地だ
积分 15712, 距离下一级还需 4288 积分
积分 15712, 距离下一级还需 4288 积分
机型小米手机4
签到次数115
MIUI版本6.9.8
下班后好好看看。辛苦了、
经验2595 米
在线时间106 小时
版本7.7.15
积分 2765, 距离下一级还需 2235 积分
积分 2765, 距离下一级还需 2235 积分
机型小米MIX
签到次数162
MIUI版本7.7.15
不辛苦,为人民服务
经验132 米
在线时间9 小时
头像被屏蔽
提示: 作者被禁止或删除 内容自动屏蔽
签名被屏蔽
经验40816 米
威望201 米
在线时间899 小时
版本V8.2.3.0.MBCCNDL
佢哋都叫我「囂哥」~~~
机型小米Max-高配全网通版
签到次数72
MIUI版本V8.2.3.0.MBCCNDL
顶帖,完事就走~~!
经验2373 米
在线时间75 小时
版本7.1.20
积分 2578, 距离下一级还需 2422 积分
积分 2578, 距离下一级还需 2422 积分
机型红米Pro
签到次数148
MIUI版本7.1.20
支持,支持
神州行-我看行-不交话费行不行
经验927 米
在线时间42 小时
版本6.5.31
积分 1027, 距离下一级还需 973 积分
积分 1027, 距离下一级还需 973 积分
机型小米Note
签到次数89
MIUI版本6.5.31
支持,支持
在线时间1 小时
积分 41, 距离下一级还需 9 积分
积分 41, 距离下一级还需 9 积分
收藏 感谢楼主
经验56776 米
威望469 米
在线时间1662 小时
版本V8.5.3.0.MADCNED
MiPad用户组—前排掌门
机型小米Note2
签到次数142
MIUI版本V8.5.3.0.MADCNED
在线时间0 小时
积分 25, 距离下一级还需 25 积分
积分 25, 距离下一级还需 25 积分
为啥改了registerListener的第三个参数 (采样延迟的时间 但是不管用啊 )采样还是很块
已关注微信
MIUI 100周
100周发布纪念勋章
MIUI 3000万
MIUI 3000万发烧友纪念勋章
MIUI 2000万
MIUI 2000万发烧友纪念勋章
1000万用户纪念勋章
MIUI1000万用户纪念勋章
MIUI三周年
MIUI三周年纪念勋章
百万壁纸评审纪念勋章
已关注极客秀微信
关注腾讯微博
已关注腾讯微博
关注新浪微博
已关注新浪微博
发烧友俱乐部
发烧友俱乐部
小米手机元器件合体活动勋章
小米求合体勋章
MIUI六周年
MIUI六周年纪念勋章
小米平板首发纪念勋章
小米平板首发纪念勋章
小米桌面内测勋章
Copyright (C) 2017 MIUI
京ICP备号 | 京公网安备34号 | 京ICP证110507号1145人阅读
镜花水月blog(49)
一款手机的传感器的种类是很多的,像米4,
竟然有26种传感器!!简直6到爆!!其实微信里的摇一摇,就是一种加速度传感器实现的。代码如下:
package com.example.lenovo.
import android.app.A
import android.content.C
import android.hardware.S
import android.hardware.SensorE
import android.hardware.SensorEventL
import android.hardware.SensorM
import android.os.B
import android.util.L
import java.util.L
public class MainActivity extends Activity implements SensorEventListener{
private long time = 0;
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
SensorManager manager = (SensorManager) getSystemService(Context.SENSOR_SERVICE);
Sensor sensor = manager.getDefaultSensor(Sensor.TYPE_ACCELEROMETER);
manager.registerListener(this,sensor,SensorManager.SENSOR_DELAY_UI);
public void onSensorChanged(SensorEvent event) {
float[] values = event.
int x = (int) Math.abs(values[0]);
int y = (int) Math.abs(values[1]);
int z = (int) Math.abs(values[2]);
if(x&10&&y&10&&z&10){
if(System.currentTimeMillis()-time&3000){
Log.d("--MainActivity","摇摇更健康");
time = System.currentTimeMillis();
public void onAccuracyChanged(Sensor sensor, int accuracy) {
&&相关文章推荐
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
访问:102343次
积分:1219
积分:1219
排名:千里之外
原创:52篇
评论:12条
(4)(1)(1)(1)(2)(3)(8)(9)(11)(6)(6)
(window.slotbydup = window.slotbydup || []).push({
id: '4740890',
container: s,
size: '250,250',
display: 'inlay-fix'Android利用传感器实现微信摇一摇功能
投稿:lijiao
字体:[ ] 类型:转载 时间:
这篇文章主要为大家详细介绍了Android利用传感器实现微信摇一摇功能,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
本文实例为大家分享了Android微信摇一摇功能的实现方法,供大家参考,具体内容如下
import java.util.ArrayL
import java.util.L
import java.util.R
import android.app.A
import android.app.S
import android.content.res.R
import android.hardware.S
import android.hardware.SensorE
import android.hardware.SensorEventL
import android.hardware.SensorM
import android.os.B
import android.os.V
import android.view.V
import android.widget.B
//需要实现SensorEventListener接口
public class LoversChoise extends Activity implements SensorEventListener{
//定义sensor管理器
private SensorManager mSensorM
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.loverschoise);
//获取传感器管理服务
mSensorManager = (SensorManager) getSystemService(SENSOR_SERVICE);
vibrator = (Vibrator) getSystemService(Service.VIBRATOR_SERVICE);
clear = (Button) findViewById(R.id.clear);
clear.setOnClickListener(new Button.OnClickListener(){
public void onClick(View arg0) {
// TODO Auto-generated method stub
//点击button后,给button按钮设置了text
clear.setText("现在给button的text赋值喽~");
protected void onResume(){
super.onResume();
//加速度传感器
mSensorManager.registerListener(this,
mSensorManager.getDefaultSensor(Sensor.TYPE_ACCELEROMETER),
//还有SENSOR_DELAY_UI、SENSOR_DELAY_FASTEST、SENSOR_DELAY_GAME等,
//根据不同应用,需要的反应速率不同,具体根据实际情况设定
SensorManager.SENSOR_DELAY_NORMAL);
protected void onStop(){
mSensorManager.unregisterListener(this);
super.onStop();
protected void onPause(){
mSensorManager.unregisterListener(this);
super.onPause();
public void onAccuracyChanged(Sensor sensor, int accuracy) {
// TODO Auto-generated method stub
//当传感器精度改变时回调该方法,Do nothing.
public void onSensorChanged(SensorEvent event) {
// TODO Auto-generated method stub
int sensorType = event.sensor.getType();
//values[0]:X轴,values[1]:Y轴,values[2]:Z轴
float[] values = event.
if(sensorType == Sensor.TYPE_ACCELEROMETER){
/*因为一般正常情况下,任意轴数值最大就在9.8~10之间,只有在你突然摇动手机
*的时候,瞬时加速度才会突然增大或减少。
*所以,经过实际测试,只需监听任一轴的加速度大于14的时候,改变你需要的设置
*就OK了~~~
if((Math.abs(values[0])&14||Math.abs(values[1])&14||Math.abs(values[2])&14)){
//摇动手机后,设置button上显示的字为空
clear.setText(null);
//摇动手机后,再伴随震动提示~~
vibrator.vibrate(500);
现在的不少应用都用到了摇动手机改变内容的功能,比如微信中的“摇一摇”功能。前两天要实现这个功能,稍微看了一下关于传感器Sensor的内容。
传感器有几种类型:
&&&&&& 方向传感器:&& Sensor.TYPE_ORIENTATION
&&&&&& 加速度(重力)传感器: Sensor.TYPE_ACCELEROMETER
&&&&&& 光线传感器:&&& Sensor.TYPE_LIGHT
&&&&&& 磁场传感器:&& Sensor.TYPE_MAGNETIC_FIELD
&&&&&& 距离(临近性)传感器: Sensor.TYPE_PROXIMITY
&&&&&& 温度传感器:&& Sensor.TYPE_TEMPERATURE
在摇动手机的功能中,我们只用加速度传感器就行了~~
加速度传感器返回值的单位是加速度的单位 m/s^2(米每二次方秒),有三个方向的值分别是
  values[0]: x-axis 方向加速度
  values[1]: y-axis 方向加速度
  values[2]: z-axis 方向加速度
其中x,y,z方向的定义是以水平放置在的手机的右下脚为参照系坐标原点
  x 方向就是手机的水平方向,右为正
  y 方向就是手机的水平垂直方向,前为正
  y 方向就是手机的空间垂直方向,天空的方向为正,地球的方向为负
所以说,你的手机放置的空间位置不同,它三个方向的加速度也不同。在这里,三个方向的加速度,与我们传统意义上的加速度(9.8m/s2)有所区别,需细细品味
以上是摇动手机后清除TextView的文字的代码。
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持脚本之家。
您可能感兴趣的文章:
大家感兴趣的内容
12345678910
最近更新的内容
常用在线小工具摇一摇需要什么传感器_百度知道
摇一摇需要什么传感器
Sensor传感器。传感器(英文名称:transducer/sensor)是一种检测装置,能感受到被测量的信息,并能将感受到的信息,按一定规律变换成为电信号或其他所需形式的信息输出,以满足信息的传输、处理、存储、显示、记录和控制等要求。传感器的特点包括:微型化、数字化、智能化、多功能化、系统化、网络化。它是实现自动检测和自动控制的首要环节。传感器的存在和发展,让物体有了触觉、味觉和嗅觉等感官,让物体慢慢变得活了起来。通常根据其基本感知功能分为热敏元件、光敏元件、气敏元件、力敏元件、磁敏元件、湿敏元件、声敏元件、放射线敏感元件、色敏元件和味敏元件等十大类。
就能知道同时玩微信的朋友了  传感器类型 方向,将使用方法第二个参数传递的浮点值数组中所包含的数据更新相应的 UI 元素。该示例只是显示这些值,但在更加高级的应用程序中,还可以分析这些值、Y、加速表,比较原来的值,或者设置某种模式识别算法来确定用户(或外部环境)的行为。  5、微信通过摇晃手中的手机就能知道现在多少人在线。  2。Android SDK。 似乎常需要调用 onSensorChanged 方法,这确实是一个非常好的方法,能很方便的联系到正在同时玩手机的朋友,将调用 onAccuracyChanged(int sensor,int accuracy) 方法、磁场、临近性、温度等。  3、SensorListener 接口是传感器应用程序的中心。示例应用程序不关心传感器的准确度,但关注传感器当前的 X、Y 和 Z 值。onAccuracyChanged 方法实质上不执行任何操作。 第三个参数是一个系统提示。  4。在本例中,应用程序从 SENSOR_ORIENTATION 和 SENSOR_ACCELEROMETER 请求数据。确认了发送数据的传感器之后。 &#8205,在移动设备中提供了各种各样的传感器的API,然后把相关的加速度值传输给操作系统: 第一个参数是实现 SensorListener 接口的类的实例。 第二个参数是所需传感器的位掩码。查看第一个参数确定哪个传感器在发送数据: onSensorChanged(int sensor,float values[]) 方法在传感器值更改时调用。该方法只对受此应用程序监视的传感器调用(更多内容见下文);它只在每次调用时添加一个日志项。该方法的参数包括:一个整数,指示更改的传感器;一个浮点值数组,表示传感器数据本身。有些传感器只提供一个数据值,另一些则提供三个浮点值。方向和加速表传感器都提供三个数据值。 当传感器的准确性更改时、Z三个方面的加速度值,X方向值的大小代表手机水平移动,Y方向值的大小代表手机垂直移动,Z方向值的大小代表手机的空间垂直方向、传感器类型 方向、加速表、光线,地球的方向为负、onResume() 方法使用对 SensorManager 的引用通过 registerListener 方法注册传感器更新,它包括两个必需方法、临近性,因为加速表和方向传感器正在快速发送数据,加速度等等物理现象的转换电子信号的机器,天空的方向为正; 应用程序(活动)暂停后,需要注销侦听器,这样以后就不会再收到传感器更新。这通过 SensorManager 的 unregisterListener 方法实现。惟一的参数是 SensorListener 的实SensorListener 必须实现两个方法 onSensorChange 和 onAccuracyChanged、光线、磁场。参数包括两个整数:一个表示传感器,另一个表示该传感器新的准确值、温度等。这个原理是手机里面集成的加速度传感器,它能够分别测量X,通过判断其大小变化。微信摇一摇原理  1、传感器(Sensor)  传感器是能标识温度,指出应用程序更新传感器值所需的速度
只需要加速度传感器就可以了,根据三个方向轴的加速度
可以选用倾角传感器,测量摇摆的角度大小和计算出摆幅。
手机吗?重力感应器。
重力感应传感器
其他3条回答
为您推荐:
其他类似问题
您可能关注的内容
摇一摇的相关知识
换一换
回答问题,赢新手礼包
个人、企业类
违法有害信息,请在下方选择后提交
色情、暴力
我们会通过消息、邮箱等方式尽快将举报结果通知您。android中如何通过加速度传感器实现摇一摇的功能呢_百度知道
android中如何通过加速度传感器实现摇一摇的功能呢
在onSensorChanged方法中怎么写呢,比如摇一摇,就播放音乐
我有更好的答案
摇一摇就触发事件,该怎么调用播放器类就怎么调用啊,播放器播放给定uri一句话搞定的吧注意加上权限
为您推荐:
其他类似问题
您可能关注的内容
加速度传感器的相关知识
换一换
回答问题,赢新手礼包
个人、企业类
违法有害信息,请在下方选择后提交
色情、暴力
我们会通过消息、邮箱等方式尽快将举报结果通知您。

我要回帖

更多关于 微信摇一摇 的文章

 

随机推荐