android手机 摇一摇功能简单实现

原创 2015年07月10日 11:43:05

 一般流程:

Sensor编程的一般步骤:

1.取得SensorManager

SensorManager sm = (SensorManager)getSystemService(SENSOR_SERVICE);

2.实现接口SensorEventListener

public void onAccuracyChanged(Sensor sensor, int accuracy) {}  //传感器精度的改变

public void onSensorChanged(SnesorEvent event) {}    //传感器报告新的值

3.取得某种Sensor对象

List<Sensor> sensors = sm.getSensorList(Sensor.TYPE_TEMPERATURE);

4.注册SensorListener

sm.regesterListener(SensorEventListener listener, Sensor sensor, int rate);

其中第三个参数是延迟时间的精密度。

表格 2感应检测Sensor的延迟时间

参数
    
延迟时间

SensorManager.SENSOR_DELAY_FASTEST    0ms

SensorManager.SENSOR_DELAY_GAME        20ms

SensorManager.SENSOR_DELAY_UI        60ms

SensorManager.SENSOR_DELAY_NORMAL    200ms


5.取消注册SensorManager

sm.unregisterListener(SensorEventListener listener);

 实现了手机摇一摇 产生一个随机数 功能:

package com.example.testshake;

import java.util.Random;

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.TextView;
import android.widget.Toast; 
 
/**
 * 安卓晃动手机监听--“摇一摇”
 */ 
public class TestSensorActivity extends Activity { 
	//传感器
    private SensorManager sensorManager; 
    //振动器
    private Vibrator vibrator; 
 
    private TextView tv;
    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.activity_main); 
        sensorManager = (SensorManager) getSystemService(SENSOR_SERVICE); 
        vibrator = (Vibrator) getSystemService(VIBRATOR_SERVICE); 
        tv=(TextView) super.findViewById(R.id.textView3);
    } 
 
    @Override 
    protected void onResume() { 
        super.onResume(); 
        if (sensorManager != null) {// 注册监听器 
        	// 第一个参数是Listener,第二个参数是所得传感器类型,第三个参数值获取传感器信息的频率
            sensorManager.registerListener(sensorEventListener, sensorManager.getDefaultSensor(Sensor.TYPE_ACCELEROMETER), SensorManager.SENSOR_DELAY_NORMAL); 
        } 
    } 
 
    //记得在不用的时候关掉传感器,因为手机黑屏是不会自动关掉传感器的,当然如果你觉得电量一直都很足,那算我多嘴咯。
    @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("sensor", "x轴方向的重力加速度" + x +  ";y轴方向的重力加速度" + y +  ";z轴方向的重力加速度" + z); 
            // 一般在这三个方向的重力加速度达到40就达到了摇晃手机的状态。 
            int medumValue = 19;// 三星 i9250怎么晃都不会超过20,没办法,只设置19了 
            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, "检测到摇晃,执行操作!", 2000).show(); 
                Log.i("sensor", "检测到摇晃,执行操作!"); 
                Random r=new Random();
                int num=r.nextInt(100)+1;
                tv.setText(num+"");
                break; 
            } 
        } 
 
    }; 
} 

以上代码实现需要在 AndroidManifest.xml 中添加操作权限

给手机添加 震动权限    
<uses-permission android:name="android.permission.VIBRATE"/>


XML

Python实现简单爬虫功能

在我们日常上网浏览网页的时候,经常会看到一些好看的图片,我们就希望把这些图片保存下载,或者用户用来做桌面壁纸,或者用来做设计的素材。...
  • qq_37267015
  • qq_37267015
  • 2017年05月06日 14:08
  • 912

JSP练习之简单计算器(使用jsp+javabean模式)

JSP案例之实现一个功能简单的计算器小程序
  • qq791967024
  • qq791967024
  • 2015年01月28日 17:57
  • 2229

Android中的几种简单小功能实现

自动提醒的设置 根据所输入的内容自动显示出所有相关的提示信息 Step1:在布局文件中定义AutoCompleteTextView           ...
  • u013721164
  • u013721164
  • 2014年03月08日 23:04
  • 860

Android 实现简单的登录实例

本程序只是一个简单的使用了TextView ,EditView, Button实现的登录小案例; 首先我们需要建立布局 Ancivity_main.xml文件 ...
  • wyh09102010
  • wyh09102010
  • 2013年09月06日 21:34
  • 1534

机器学习之实现简单的神经网络

实现简单的神经网络机器学习的本质是模拟人的神经元对信息的处理方法。可以将神经元看成是一个简单的带有二进制输出功能的逻辑电路门,多种电信号可以从神经元的树突部分传入,然后对多个传入的电信号进行结合,统一...
  • qq_38237214
  • qq_38237214
  • 2017年08月02日 17:55
  • 431

Linux编程实现一个简单的Shell

在linux中实现一个简单的命令解释程序,功能要求: 1)同时支持内部命令和外部命令,内部命令支持两个(cd、exit) 2)支持后台命令 首先解释一下上面的两个要求,实际上是三种情况: 1.如果是...
  • whoami021
  • whoami021
  • 2013年12月22日 21:31
  • 2113

使用UDP实现聊天功能

发送端: package 课后作业.E103_09_Chat; import java.io.IOException; import java.net.*; import java.util.Sc...
  • liyongshun_123
  • liyongshun_123
  • 2017年12月24日 19:48
  • 19

android 客户端简单的聊天程序实现

android聊天室的聊天功能吧,先说说服务器端的代码及其功能吧 server.java : 负责服务器的界面,以及更服务器主线程ServerThread的启动,产生了BroadCast广播,产...
  • u010507199
  • u010507199
  • 2015年08月12日 09:20
  • 5432

用javascript实现简单计算器

这是一个简单计算器的实现。可以实现简单的加,减,乘,除功能,用户按下“←”按钮,删除当前算术表达式最后一个字符,并更新显示,用户按下“CE”按钮,清除当前算术表达式,如果算术表达式非法,弹出警告框提醒...
  • XHF901
  • XHF901
  • 2016年12月09日 15:49
  • 328

Java实现简单计算器

此次计算器设计界面不是按一般的计算器界面设计,而是根据特定的要求实现的一个简单计算器,不过设计思路基本相似,其功能只包含加减乘除四个功能,运行界面截图如下: 用Java实现计算器应该算是J...
  • zhaokx3
  • zhaokx3
  • 2016年06月29日 16:56
  • 793
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:android手机 摇一摇功能简单实现
举报原因:
原因补充:

(最多只允许输入30个字)