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(转载请说明出处)

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

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

【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛

【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...

(0)


相关推荐

  • 【SCOI补全记】SCOI2016 bzoj4567-4572

    【SCOI补全记】SCOI2016 bzoj4567-4572T1:背单词(bzoj4567)题解代码T2:幸运数字(bzoj4568)题解代码T3:萌萌哒(bzoj4569)T4:妖怪(bzoj4570)T5:美味(bzoj4571)题解代码T6:围棋(bzoj4572)T1:背单词(bzoj4567)题解关键词:trie树贪心题意有些难懂,简单解释一下。对于在位置xxx的单词:…

  • laravel where orwhere的写法

    laravel where orwhere的写法

    2021年11月10日
  • Tabnine Pro激活码【2021最新】

    (Tabnine Pro激活码)最近有小伙伴私信我,问我这边有没有免费的intellijIdea的激活码,然后我将全栈君台教程分享给他了。激活成功之后他一直表示感谢,哈哈~IntelliJ2021最新激活注册码,破解教程可免费永久激活,亲测有效,下面是详细链接哦~https://javaforall.cn/100143.html…

  • socket常用函数_socket是可重入函数吗

    socket常用函数_socket是可重入函数吗前言socketpair是Linux下的函数,其主要作用是创建一对套节字来进行进程间通信,其与匿名管道(PIPE)的作用相似,这两个套节字均可读可写.具体介绍见本博客另一篇文章:https://blog.csdn.net/wufuhuai/article/details/79747912实现我们都知道socket不仅能够进行跨进程通信,而且socket是可以双向通信的,即是…

    2022年10月14日
  • sql注入及用PrepareStatement就不用担心sql注入了吗?

    sql注入及用PrepareStatement就不用担心sql注入了吗?首先讲一下sql注入所谓SQL注入,就是通过把SQL命令插入到Web表单提交或输入域名或页面请求的查询字符串,最终达到欺骗服务器执行恶意的SQL命令。具体来说,它是利用现有应用程序,将(恶意)的SQL命令注入到后台数据库引擎执行的能力,它可以通过在Web表单中输入(恶意)SQL语句得到一个存在安全漏洞的网站上的数据库,而不是按照设计者意图去执行SQL语句。比如先前的很多影视网站泄露

  • nginx设置编码格式utf-8

    nginx设置编码格式utf-8nginx设置编码格式utf-8在server下配置charsetutf-8;server{listen8000;server_namelocalhost;charsetutf-8;}后台使用tomcat时,get请求参数乱码更改nginx编码格式设置无效需要更改tomcat编…

发表回复

您的电子邮箱地址不会被公开。

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