android之摇一摇功能_SensorManager的使用

实现“摇一摇”功能,其实很简单,就是检测手机的重力感应,具体实现代码如下:一、在 AndroidManifest.xml 中添加操作权限二、实现代码import android.app.Activity; import android.hardware.Sensor; import android.hardware.SensorEvent; import android.h

大家好,又见面了,我是全栈君。

实现“摇一摇”功能,其实很简单,就是检测手机的重力感应,具体实现代码如下:

一、在 AndroidManifest.xml 中添加操作权限

<uses-permission android:name="android.permission.VIBRATE"/>

二、实现代码

 

import android.app.Activity; 
import android.hardware.Sensor; 
import android.hardware.SensorEvent; 
import android.hardware.SensorEventListener; 
import android.hardware.SensorManager; 
import android.os.Bundle; 
import android.os.Handler; 
import android.os.Message; 
import android.os.Vibrator; 
import android.util.Log; 
import android.widget.Toast; 
 
/**
 * 安卓晃动手机监听--“摇一摇”
 * 
 * @author jason0539
 * 
 */ 
public class TestSensorActivity extends Activity { 
 
    private SensorManager sensorManager; 
    private Vibrator vibrator; 
 
    private static final String TAG = "TestSensorActivity"; 
    private static final int SENSOR_SHAKE = 10; 
 
    /** Called when the activity is first created. */ 
    @Override 
    public void onCreate(Bundle savedInstanceState) { 
        super.onCreate(savedInstanceState); 
        setContentView(R.layout.main); 
        sensorManager = (SensorManager) getSystemService(SENSOR_SERVICE); 
        vibrator = (Vibrator) getSystemService(VIBRATOR_SERVICE); 
    } 
 
    @Override 
    protected void onResume() { 
        super.onResume(); 
        if (sensorManager != null) {// 注册监听器 
            sensorManager.registerListener(sensorEventListener, sensorManager.getDefaultSensor(Sensor.TYPE_ACCELEROMETER), SensorManager.SENSOR_DELAY_NORMAL); 
            // 第一个参数是Listener,第二个参数是所得传感器类型,第三个参数值获取传感器信息的频率 
        } 
    } 
 
    @Override 
    protected void onStop() { 
        super.onStop(); 
        if (sensorManager != null) {// 取消监听器 
            sensorManager.unregisterListener(sensorEventListener); 
        } 
    } 
 
    /**
     * 重力感应监听
     */ 
    private SensorEventListener sensorEventListener = new SensorEventListener() { 
 
        @Override 
        public void onSensorChanged(SensorEvent event) { 
            // 传感器信息改变时执行该方法 
            float[] values = event.values; 
            float x = values[0]; // x轴方向的重力加速度,向右为正 
            float y = values[1]; // y轴方向的重力加速度,向前为正 
            float z = values[2]; // z轴方向的重力加速度,向上为正 
            Log.i(TAG, "x轴方向的重力加速度" + x +  ";y轴方向的重力加速度" + y +  ";z轴方向的重力加速度" + z); 
            // 一般在这三个方向的重力加速度达到40就达到了摇晃手机的状态。 
            int medumValue = 19;// 如果不敏感请自行调低该数值,低于10的话就不行了,因为z轴上的加速度本身就已经达到10了              
        if (Math.abs(x) > medumValue || Math.abs(y) > medumValue || Math.abs(z) > medumValue) { 
                vibrator.vibrate(200); 
                Message msg = new Message(); 
                msg.what = SENSOR_SHAKE; 
                handler.sendMessage(msg); 
            } 
        } 
 
        @Override 
        public void onAccuracyChanged(Sensor sensor, int accuracy) { 
 
        } 
    }; 
 
    /**
     * 动作执行
     */ 
    Handler handler = new Handler() { 
 
        @Override 
        public void handleMessage(Message msg) { 
            super.handleMessage(msg); 
            switch (msg.what) { 
            case SENSOR_SHAKE: 
                Toast.makeText(TestSensorActivity.this, "检测到摇晃,执行操作!", Toast.LENGTH_SHORT).show(); 
                Log.i(TAG, "检测到摇晃,执行操作!"); 
                break; 
            } 
        } 
 
    }; 
} 

 

这种实现方式是最简单的,同时也是最敷衍的..等等我整理一个更加严谨的出来,这个跑一下就明显感觉到,摇起来真累.

作者:jason0539

微博:http://weibo.com/2553717707

博客:http://blog.csdn.net/jason0539(转载请说明出处)

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/121409.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • 设置Windows系统自动登录

    设置Windows系统自动登录

    2021年8月17日
    48
  • windows杀死进程[通俗易懂]

    windows杀死进程[通俗易懂]netstat-aon|findstr8080查询端口号为8080的进程tasklist|findstr”1900″找到pid为1900的运行中的程序taskkill/imtomcat7.exe/f强制解除进程

    2022年9月21日
    4
  • HttpCanary_django request对象

    HttpCanary_django request对象HttpResponse对象Django服务器接收到客户端发送过来的请求后,会将提交上来的这些数据封装成一个HttpRequest对象传给视图函数。那么视图函数在处理完相关的逻辑后,也需要返回一个响

    2022年7月29日
    7
  • 永恒之蓝漏洞原理分析_永恒之蓝是谁激活成功教程的

    永恒之蓝漏洞原理分析_永恒之蓝是谁激活成功教程的本文转自行云博客https://www.xy586.top/文章目录摘要前提需要原理漏洞利用摘要什么是永恒之蓝永恒之蓝(EternalBlue)爆发于2017年4月14日晚,是一种利用Windows系统的SMB协议漏洞来获取系统的最高权限,以此来控制被入侵的计算机。甚至于2017年5月12日,不法分子通过改造“永恒之蓝”制作了wannacry勒索病毒,使全世界大范围内遭受了该勒索病毒,甚至波及到学校、大型企业、政府等机构,只能通过支付高额的赎金才能恢复出文件。不过在该病毒出来不久就被微软通.

    2022年10月17日
    4
  • 二进制乘法除法运算_二进制的补码怎么算

    二进制乘法除法运算_二进制的补码怎么算二进制补码乘法除法1)二进制乘法(1)BinaryMultiplication)Binarynumberscanbemultipliedusingtwomethods,二进制数可以使用两种方法相乘,Papermethod:Papermethodissimilartomultiplicationofdecimalnumbersonpaper….

    2022年10月7日
    3
  • zigbee学习之路(十二):zigbee协议原理介绍

    zigbee学习之路(十二):zigbee协议原理介绍一.前言从今天开始,我们要正式开始进行zigbee相关的通信实验了,我所使用的协议栈是ZStack是TIZStack-CC2530-2.3.0-1.4.0版本,大家也可以从TI的官网上直接下载T

    2022年8月2日
    14

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号