我的编程空间,编程开发者的网络收藏夹
学习永远不晚

Android实现摇一摇功能

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

Android实现摇一摇功能

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

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

2、实现代码


 package com.xs.test; 
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; 
 
public class TestSensorActivity extends Activity { 
  private SensorManager sensorManager; 
  private Vibrator vibrator; 
  private static final String TAG = "TestSensorActivity"; 
  private static final int SENSOR_SHAKE = 10; 
   
  @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 onPause() { 
    super.onPause(); 
    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;// 三星 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, "检测到摇晃,执行操作!", Toast.LENGTH_SHORT).show(); 
        Log.i(TAG, "检测到摇晃,执行操作!"); 
        break; 
      } 
    } 
  }; 
} 

这种摇一摇比较普通,没有经过算法的加强,重力加速度就是10。
算法优化如下


package com.example.url;
import java.io.IOException;
import java.net.URL;
import com.hahashijie.imageload.ImageLoader;
import android.annotation.SuppressLint;
import android.app.Activity;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.graphics.drawable.Drawable;
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.ImageView;
@SuppressLint("HandlerLeak")
public class MainActivity extends Activity {
private ImageView image;
private SensorManager sensorManager;
private Sensor sensor;
private Vibrator vibrator;
private static final int UPTATE_INTERVAL_TIME = 50;
private static final int SPEED_SHRESHOLD = 30;//这个值调节灵敏度
private long lastUpdateTime;
private float lastX;
private float lastY;
private float lastZ;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
sensorManager = (SensorManager) getSystemService(SENSOR_SERVICE);
vibrator = (Vibrator) getSystemService(VIBRATOR_SERVICE);
image = (ImageView) findViewById(R.id.image);
}
@Override
protected void onResume() {
// TODO Auto-generated method stub
super.onResume();
if (sensorManager != null) {
      sensor = sensorManager.getDefaultSensor(Sensor.TYPE_ACCELEROMETER);
    }
    if (sensor != null) {
    sensorManager.registerListener(sensorEventListener,
    sensor,
SensorManager.SENSOR_DELAY_GAME);//这里选择感应频率
    }
}

private SensorEventListener sensorEventListener = new SensorEventListener() {
@Override
public void onSensorChanged(SensorEvent event) {
long currentUpdateTime = System.currentTimeMillis();
long timeInterval = currentUpdateTime - lastUpdateTime;
if (timeInterval < UPTATE_INTERVAL_TIME) {
return;
}
lastUpdateTime = currentUpdateTime;
// 传感器信息改变时执行该方法
float[] values = event.values;
float x = values[0]; // x轴方向的重力加速度,向右为正
float y = values[1]; // y轴方向的重力加速度,向前为正
float z = values[2]; // z轴方向的重力加速度,向上为正
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) * 100;
if (speed >= SPEED_SHRESHOLD) {
vibrator.vibrate(300);
image.setImageResource(R.drawable.running01);
}
}
@Override
public void onAccuracyChanged(Sensor sensor, int accuracy) {
}
};
}
您可能感兴趣的文章:android重力感应开发之微信摇一摇功能Android编程使用加速度传感器实现摇一摇功能及优化的方法详解Android实现iPhone晃动撤销输入功能 Android仿微信摇一摇功能Android利用传感器仿微信摇一摇功能Android利用传感器实现微信摇一摇功能Android 微信摇一摇功能实现详细介绍android 类似微信的摇一摇功能实现思路及代码java仿微信摇一摇实现播放音乐


免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

Android实现摇一摇功能

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

Android实现摇一摇功能

实现“摇一摇”功能,其实很简单,就是检测手机的重力感应,具体实现代码如下: 1、在 AndroidManifest.xml 中添加操作权限 2、实现代码package com.xs.test; import android.app.Act
2022-06-06

怎么在Android中实现一个摇一摇功能

本篇文章给大家分享的是有关怎么在Android中实现一个摇一摇功能,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。步骤1:声明一个SensorManager对象步骤2:重写Act
2023-06-14

Android 微信摇一摇功能实现详细介绍

Android 微信摇一摇功能实现,最近学习传感器,就想实现摇一摇的功能,上网查了些资料,就整理下。如有错误,还请指正。 开发环境Android Studio 2.2.1JDK1.7API 24Gradle 2.2.1 相关知识点加速度传感
2022-06-06

Android利用传感器实现微信摇一摇功能

本文实例为大家分享了Android微信摇一摇功能的实现方法,供大家参考,具体内容如下import java.util.ArrayList; import java.util.List; import java.util.Random
2022-06-06

Android如何使用加速度传感器实现摇一摇功能

这篇文章将为大家详细讲解有关Android如何使用加速度传感器实现摇一摇功能,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。具体如下:目前很多应用已经实现了摇一摇功能,这里通过讲解该功能的原理及实现回顾一下
2023-05-30

Html5+JS实现手机摇一摇功能的示例

小编给大家分享一下Html5+JS实现手机摇一摇功能的示例,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!js有什么特点1、js属于一种解释性脚本语言;2、在绝大多
2023-06-09

Android利用传感器仿微信摇一摇功能

传感器简单的介绍一下传感器: 就是设备用来感知周边环境变化的硬件。Android中的传感器包含在传感器框架中,属于android.hardware.*(硬件部分)传感器框架主要包含四个部分:① SensorManager:用来获取传感器的入
2023-05-31

android 类似微信的摇一摇功能实现思路及代码

代码如下: package com.eboy.testyaoyiyao; import java.text.SimpleDateFormat; import java.util.Date; import android.app.Activi
2022-06-06

怎么在Html5中实现手机摇一摇事件

怎么在Html5中实现手机摇一摇事件?针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。