MainActivity.java
package com.sensor;
import com.sensor.ShakeListener.OnShakeListener;
import android.os.Bundle;
import android.app.Activity;
import android.view.Menu;
public class MainActivity extends Activity {
private ShakeListener shakeListener;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
shakeListener=new ShakeListener(this);
shakeListener.setOnShakeListener(new Shake());
}
class Shake implements OnShakeListener{
@Override
public void onShake() {
// TODO Auto-generated method stub
setTitle("正在摇动了手机");
}
}
@Override
protected void onResume() {
// TODO Auto-generated method stub
super.onResume();
shakeListener.start();
}
@Override
protected void onPause() {
// TODO Auto-generated method stub
super.onPause();
shakeListener.stop();
}
@Override
protected void onDestroy() {
// TODO Auto-generated method stub
super.onDestroy();
shakeListener.stop();
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
getMenuInflater().inflate(R.menu.activity_main, menu);
return true;
}
}
ShakeListener.java
package com.sensor;
import android.app.Service;
import android.content.Context;
import android.hardware.Sensor;
import android.hardware.SensorEvent;
import android.hardware.SensorEventListener;
import android.hardware.SensorManager;
import android.os.Vibrator;
public class ShakeListener implements SensorEventListener {
private static final int SPEED_SHRESHOLD=3000;
private static final int UPDATE_INTERVAL_TIME=78;
private SensorManager sensorManager;
private Sensor sensor;
private Vibrator vibrator;
private OnShakeListener onShakeListener;
private Context context;
private float lastx;
private float lasty;
private float lastz;
private long lastUpdateTime;
public ShakeListener(Context context) {
super();
this.context = context;
start();
}
public void start() {
// TODO Auto-generated method stub
sensorManager=(SensorManager) context.getSystemService(Context.SENSOR_SERVICE);
vibrator=(Vibrator) context.getSystemService(Service.VIBRATOR_SERVICE);
if(sensorManager!=null){
sensor=sensorManager.getDefaultSensor(Sensor.TYPE_ACCELEROMETER);
}
if(sensor!=null){
sensorManager.registerListener(this, sensor, SensorManager.SENSOR_DELAY_GAME);
}
}
public void stop() {
// TODO Auto-generated method stub
sensorManager.unregisterListener(this);
}
public void setOnShakeListener(OnShakeListener listener){
onShakeListener=listener;
}
public interface OnShakeListener{
public void onShake();
}
@Override
public void onSensorChanged(SensorEvent event) {
// TODO Auto-generated method stub
long currentUpdateTime=System.currentTimeMillis();
long timeInterval=currentUpdateTime-lastUpdateTime;
if(timeInterval<UPDATE_INTERVAL_TIME){
return;
}
lastUpdateTime=currentUpdateTime;
float x=event.values[0];
float y=event.values[1];
float z=event.values[2];
float deltaX=x-lastx;
float deltaY=y-lasty;
float deltaZ=z-lastz;
lastx=x;
lasty=y;
lastz=z;
double speed=Math.sqrt(deltaX*deltaX+deltaY*deltaY+deltaZ*deltaZ)/timeInterval*10000;
if(speed>=SPEED_SHRESHOLD){
onShakeListener.onShake();
vibrator.vibrate(1000);
}
}
private boolean coordinate(Float x,Float y,Float z){
if((x>10&&y>10)||(x>10&&z>10)||(y>10&&z>10)){
return true;
}else{
return false;
}
}
@Override
public void onAccuracyChanged(Sensor sensor, int accuracy) {
// TODO Auto-generated method stub
vibrator.vibrate(0);
}
}
manifest.xml
<uses-permission android:name="android.permission.VIBRATE"/>
分享到:
相关推荐
在Android系统中,传感器系统架构的设计是至关重要的,因为它负责收集和处理来自各种传感器的数据,如重力感应器(G-sensor)。以下是关于这个话题的详细解析: 1. **体系结构** Android传感器系统架构主要由四个...
在Android操作系统中,Sensor框架是核心组件之一,它允许开发者访问和处理设备的各种传感器数据,如加速度计、陀螺仪、磁力计等。"sensor测试apk.zip"这个压缩包显然包含了两个APK文件,即SensorSense_jb51.apk和...
在Android开发中,方向传感器(Orientation Sensor)是一个关键的组件,它允许应用程序获取设备的三维空间中的方向信息。本实例,"Android实例之OrientationSensor方向传感器",将深入讲解如何在Delphi环境下利用...
### Android 传感器 Sensor 编程 #### 一、Android 传感器概述 Android 作为一个高度灵活且功能丰富的操作系统,为开发者提供了强大的硬件访问能力。其中,传感器技术是Android平台的重要组成部分之一,它允许...
Sensor类是Android框架用于表示传感器的抽象类,它包含了关于传感器类型、分辨率、精度等信息。在Android的SensorManager服务中,我们可以获取到所有可用的传感器,其中包括加速传感器。 ```java SensorManager ...
在Android开发中,Sensor传感器是实现设备智能化和交互性的重要组成部分。本文将深入探讨如何在Android Studio环境下利用Sensor API进行传感器编程,这是Android开发-Sensor传感器系列教程的第二部分。 一、Android...
在Android系统中,传感器是设备获取环境数据的关键组件,如加速度、陀螺仪和地磁传感器。这些传感器用于各种应用,从简单的设备方向检测到复杂的游戏体验和增强现实功能。然而,由于制造过程中的微小差异和长期使用...
在Android开发中,E-compass(电子指南针)传感器是一个重要的组成部分,它允许应用获取设备的方向信息,基于地球的磁场来指示北向。本话题将深入探讨如何利用Android的高级Canvas绘图技术来呈现E-compass的数据,并...
本压缩包文件“Sensor传感器”包含了关于手机传感器的文档和代码演示,旨在帮助我们了解手机内置的各种传感器及其应用。 1. **加速度传感器**:加速度传感器能够检测设备在三维空间中的线性加速度,例如手机的移动...
Android-Orientation-Sensor是一个专为Android平台设计的开源库,其主要目的是利用设备上所有可用的传感器来提供更准确的定向矢量值。在Android系统中,传感器是获取设备环境变化的重要工具,如设备的旋转、倾斜、加...
在Android平台上,Sensor(传感器)是设备硬件的重要组成部分,它们提供了关于设备状态和环境变化的信息。这个源码项目专门用于帮助开发者了解如何获取手机上的所有传感器,并进行数据测试。通过这个项目,我们可以...
在`android.hardware.Sensor`类中,定义了各种传感器类型,如TYPE_ACCELEROMETER代表加速度计,而TYPE_VIBRATION_SENSOR则对应震动传感器。 要实现“摇一摇”功能,我们首先要监听加速度计的数据变化。通过调用...
在本主题"mtk sensor 传感器驱动及安卓层框架"中,我们将深入探讨MediaTek(mtk)平台上的传感器驱动实现以及Android系统层的传感器框架。 首先,让我们关注"mtk sensor 驱动框架"中的`hwmsen_dev.c`文件。这个文件...
在Android平台上,Sensor.TYPE_ACCELEROMETER是用于访问设备内置的加速度传感器的关键常量。这个传感器能够检测到设备在三维空间中的线性加速度,包括由于地球引力引起的加速度和用户对设备施加的动态加速度。在移动...
在Android平台上,我们可以利用内置的Sensor服务来创建各种有趣的应用,比如本文提到的水平仪功能。Sensor服务提供了访问设备各种传感器数据的能力,如加速度传感器、陀螺仪、磁力计等。在这个案例中,我们将重点...
为了在Android应用中使用这些传感器,首先需要在AndroidManifest.xml中添加相应的权限,例如`<uses-feature android:name="android.hardware.sensor.accelerometer" android:required="true">`。接着,初始化`...
在Android开发中,Sensor传感器是实现许多有趣功能的关键部分,比如运动检测、环境感知等。本文将深入探讨如何在Android Studio环境下使用Sensor API来实现一个基础的“摇一摇”功能,让应用能够识别用户的摇动操作...
本教程主要聚焦于Android设备上的各种传感器,包括加速度传感器、方向传感器、陀螺仪传感器、磁场传感器、重力传感器和线性加速度传感器,以及如何获取它们的实时返回数据。 1. **加速度传感器**: 加速度传感器...
ANDROID 传感器开发概述 Android 是一个面向应用程序开发的丰富平台,它拥有许多具有吸引力的用户界面元素、数据管理和网络应用等优秀的功能。Android 还提供了很多颇具特色的接口。本文我们将分别介绍这些吸引...