利用Sensor實現android手機類似于微信搖一搖

openkk 12年前發布 | 34K 次閱讀 Android Android開發 移動開發

傳感器有幾種類型:
方向傳感器: Sensor.TYPE_ORIENTATION
加速度(重力)傳感器: Sensor.TYPE_ACCELEROMETER
光線傳感器: Sensor.TYPE_LIGHT
磁場傳感器: Sensor.TYPE_MAGNETIC_FIELD
距離(臨近性)傳感器: Sensor.TYPE_PROXIMITY
溫度傳感器: Sensor.TYPE_TEMPERATURE

 

這里我們利用的是加速度傳感器

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] 大于的上限。

轉自:http://blog.csdn.net/jamin0107/article/details/7297367

 本文由用戶 openkk 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
 轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
 本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!