您的位置:首页 > 移动开发 > 微信开发

利用Sensor实现android手机类似于微信摇一摇

2012-03-24 23:04 417 查看
出处:http://blog.csdn.net/jamin0107/article/details/7297367

传感器有几种类型:
方向传感器: Sensor.TYPE_ORIENTATION
加速度(重力)传感器: Sensor.TYPE_ACCELEROMETER
光线传感器: Sensor.TYPE_LIGHT
磁场传感器: Sensor.TYPE_MAGNETIC_FIELD
距离(临近性)传感器: Sensor.TYPE_PROXIMITY
温度传感器: Sensor.TYPE_TEMPERATURE

 

这里我们利用的是加速度传感器

 

 

[java] view
plaincopy

package com.jamin.sensor;  

  

import android.app.Activity;  

import android.app.Service;  

import android.hardware.Sensor;  

import android.hardware.SensorEvent;  

import android.hardware.SensorEventListener;  

import android.hardware.SensorManager;  

import android.os.Bundle;  

import android.os.Vibrator;  

import android.util.Log;  

import android.view.View;  

import android.widget.Button;  

import android.widget.TextView;  

  

public class SensorTestActivity extends Activity implements SensorEventListener{  

    /** Called when the activity is first created. */  

  

  

    TextView tv = null;  

    Button button = null;  

    SensorManager sensorManager = null;  

    Vibrator vibrator = null;  

  

    @Override  

    public void onCreate(Bundle savedInstanceState) {  

        super.onCreate(savedInstanceState);  

        setContentView(R.layout.main);  

  

        button = (Button) findViewById(R.id.button1);  

        tv = (TextView) findViewById(R.id.textview1);  

        button.setOnClickListener(new View.OnClickListener() {  

  

            @Override  

            public void onClick(View v) {  

  

                // TODO Auto-generated method stub  

                tv.setText("文本复原");   

            }  

        });  

  

        sensorManager = (SensorManager) getSystemService(SENSOR_SERVICE);  

        vibrator = (Vibrator) getSystemService(Service.VIBRATOR_SERVICE);  

  

  

    }  

  

  

  

  

  

  

    @Override  

    protected void onPause() {  

  

        // TODO Auto-generated method stub  

        super.onPause();  

        sensorManager.unregisterListener(this);  

    }  

  

  

  

  

  

  

    @Override  

    protected void onResume() {  

  

        // TODO Auto-generated method stub  

        super.onResume();  

        sensorManager.registerListener(this, sensorManager.getDefaultSensor(Sensor.TYPE_ACCELEROMETER), SensorManager.SENSOR_DELAY_NORMAL);  

  

    }  

  

  

  

  

  

  

    @Override  

    public void onAccuracyChanged(Sensor sensor, int accuracy) {  

        //当传感器精度改变时回调该方法,Do nothing.  

    }  

  

  

  

    @Override  

    public void onSensorChanged(SensorEvent event) {  

  

          

        int sensorType = event.sensor.getType();  

        //values[0]:X轴,values[1]:Y轴,values[2]:Z轴  

        float[] values = event.values;  

        if(sensorType == Sensor.TYPE_ACCELEROMETER){              

            if((Math.abs(values[0])>17||Math.abs(values[1])>17||Math.abs(values[2])>17)){  

                Log.d("sensor ", "============ values[0] = " + values[0]);  

                Log.d("sensor ", "============ values[1] = " + values[1]);  

                Log.d("sensor ", "============ values[2] = " + values[2]);  

                tv.setText("摇一摇");  

                //摇动手机后,再伴随震动提示~~  

                vibrator.vibrate(500);  

            }  

  

  

        }  

    }  

  

  

  

  

  

  

  

}  

记得在onresume和onpause的时候开关sensor的监听事件。

如果想调整sensor的敏感程度,就去修改,value[0,1,2] 大于的上限。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
相关文章推荐