摇一摇原理(Sensor传感器的一些心得)
摇⼀摇原理(Sensor传感器的⼀些⼼得)
摇⼀摇原理(Sensor传感器的⼀些⼼得)
1、传感器(Sensor)是什么?
传感器是能标识温度,加速度等等物理现象的转换电⼦信号的机器。Android SDK,在移动设备中提供了各种各样的传感器的API。
2、传感器类型
⽅向、加速表、光线、磁场、临近性、温度等。
3、SensorListener 接⼝是传感器应⽤程序的中⼼,它包括两个必需⽅法:
onSensorChanged(int sensor,float values[])⽅法在传感器值更改时调⽤。该⽅法只对受此应⽤程序监视的传感器调⽤(更多内容见下⽂)。该⽅法的参数包括:⼀个整数,指⽰更改的传感器;⼀个浮点值数组,表⽰传感器数据本⾝。有些传感器只提供⼀个数据值,另⼀些则提供三个浮点值。都提供三个数据值。
当传感器的准确性更改时,将调⽤onAccuracyChanged(int sensor,int accuracy)⽅法。参数包括两个整数:⼀个表⽰传感器,另⼀个表⽰该传感器新的准确值。
4、onResume()⽅法使⽤对SensorManager的引⽤通过registerListener⽅法注册传感器更新:
第⼀个参数是实现SensorListener接⼝的类的实例。
第⼆个参数是所需传感器的位掩码。在本例中,应⽤程序从SENSOR_ORIENTATION和SENSOR_ACCELEROMETER请求数据。
第三个参数是⼀个系统提⽰,指出应⽤程序更新传感器值所需的速度。
应⽤程序(活动)暂停后,需要注销侦听器,这样以后就不会再收到传感器更新。这通过SensorManager的unregisterListener⽅法实现。惟⼀的参数是SensorListener的实例。
SensorListener必须实现两个⽅法onSensorChange和onAccuracyChanged。⽰例应⽤程序不关⼼传感器的准确度,但关注传感器当前的 X、Y 和 Z 值。onAccuracyChanged⽅法实质上不执⾏任何操作;它只在每次调⽤时添加⼀个⽇志项。
似乎经常需要调⽤onSensorChanged⽅法,因为加速表和⽅向传感器正在快速发送数据。查看第⼀个
参数确定哪个传感器在发送数据。确认了发送数据的传感器之后,将使⽤⽅法第⼆个参数传递的浮点值数组中所包含的数据更新相应的 UI 元素。该⽰例只是显⽰这些值,但在更加⾼级的分析这些值,⽐较原来的值,或者设置某种模式识别算法来确定⽤户(或外部环境)的⾏为。
package wuba.shakedemo.guocg;
import android.app.Activity;
import android.os.Bundle;
import android.util.Log;
import android.widget.TextView;
import android.hardware.SensorManager;
import android.hardware.SensorListener;
public class Sensor extends Activity implements SensorListener {
final String tag = "IBMEyes";
SensorManager sm = null;
TextView xViewA = null;
TextView yViewA = null;
TextView zViewA = null;
TextView xViewO = null;
TextView yViewO = null;
TextView zViewO = null;
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
/
/ get reference to SensorManager        sm = (SensorManager) getSystemService(SENSOR_SERVICE);
setContentView(R.layout.main);
xViewA = (TextView) findViewById(R.id.xbox);
yViewA = (TextView) findViewById(R.id.ybox);
zViewA = (TextView) findViewById(R.id.zbox);
xViewO = (TextView) findViewById(R.id.xboxo);
yViewO = (TextView) findViewById(R.id.yboxo);
zViewO = (TextView) findViewById(R.id.zboxo);
}
public void onSensorChanged(int sensor, float[] values) {
synchronized (this) {
Log.d(tag, "onSensorChanged: " + sensor + ", x: " +
values[0] + ", y: " + values[1] + ", z: " + values[2]);
if (sensor == SensorManager.SENSOR_ORIENTATION) {
xViewO.setText("Orientation X: " + values[0]);
yViewO.setText("Orientation Y: " + values[1]);
zViewO.setText("Orientation Z: " + values[2]);
}
if (sensor == SensorManager.SENSOR_ACCELEROMETER) {
xViewA.setText("Accel X: " + values[0]);
yViewA.setText("Accel Y: " + values[1]);
zViewA.setText("Accel Z: " + values[2]);
}
}
}
public void onAccuracyChanged(int sensor, int accuracy) {
Log.d(tag,"onAccuracyChanged: " + sensor + ", accuracy: " + accuracy);
}
@Override
protected void onResume() {
// register this class as a listener for the orientation and accelerometer sensors        sm.registerListener(this,
SensorManager.SENSOR_ORIENTATION |SensorManager.SENSOR_ACCELEROMETER,
SensorManager.SENSOR_DELAY_NORMAL);
}
@Override
protected void onStop() {
// unregister listener        sm.unregisterListener(this);
}
}
5、通过摇晃⼿中的⼿机就能知道现在多少⼈在线,这确实是⼀个⾮常好的⽅法,能很⽅便的联系到正在同时玩⼿机的朋友。这个原理是⼿机⾥⾯集成的加速度传感器,它能够分别测量X、Y、Z三个⽅值,X⽅向值的⼤⼩代表⼿机⽔平移动,Y⽅向值的⼤⼩代表⼿机垂直移动,Z⽅向值的⼤⼩代表
⼿机的空间垂直⽅向,天空的⽅向为正,地球的⽅向为负,然后把相关的加速度值传输给操作系统,通过判就能知道同时玩的朋友了。
package boke.sensor.yao;
import com.se.yao.R;
import android.app.Activity;
import android.app.AlertDialog;
import android.app.Dialog;
import android.app.AlertDialog.Builder;
t.Context;
t.DialogInterface;
t.DialogInterface.OnClickListener;
import android.hardware.Sensor;
冰箱冬天调到几档最好
import android.hardware.SensorEvent;
import android.hardware.SensorEventListener;
import android.hardware.SensorManager;
import android.os.Bundle;
import android.util.Log;
import android.widget.TextView;
import android.widget.Toast;
public class SeActivity extends Activity {
合肥特小吃SensorManager sm;
SensorL listener;
private boolean isRefresh=false;
Dialog d;
@Override
public void onCreate(Bundle savedInstanceState) {
setContentView(R.layout.main);
sm = (SensorManager) getSystemService(Context.SENSOR_SERVICE);
listener = new SensorL();
梦见有人追杀我
// 对加速计进⾏监听        sm.registerListener(listener, sm.getDefaultSensor(Sensor.TYPE_ACCELEROMETER),
SensorManager.SENSOR_DELAY_FASTEST);
// sm.registerListener(listener,        // sm.getDefaultSensor(Sensor.TYPE_MAGNETIC_FIELD),SensorManager.SENSOR_DELAY_FASTEST); 
      // sm.registerListener(DefaultSensor(Sensor.TYPE_PRESSURE),SensorManager.SENSOR_        AlertDialog.Builder b = new Builder(this);
// ⽤来显⽰的对话框        d = b.setPositiveButton("ok", new OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
// TODO Auto-generated method stub                isRefresh = false;
2022年11月黄道吉日
dialog.cancel();
}
}).setMessage("摇到了.................").create();
}
private class SensorL implements SensorEventListener {
@Override
public void onAccuracyChanged(Sensor sensor, int accuracy) {
// TODO Auto-generated method stub
}
@Override
public void onSensorChanged(SensorEvent event) {
// TODO Auto-generated method stub            if (Type() == Sensor.TYPE_ACCELEROMETER) {
// 判断是否在刷新                if (isRefresh)
return;
float newX = Math.abs(event.values[SensorManager.DATA_X]);
float newY = Math.abs(event.values[SensorManager.DATA_Y]);
float newZ = Math.abs(event.values[SensorManager.DATA_Z]);
// 这⾥是关键,判断某个⽅向上的加速度值是否达到⾃⼰想要的值                // X                if (newX >= 18) {
Toast.makeText(SeActivity.this, "newX" + newX, 0).show();
isRefresh = true;
d.show();
return;
}
// Y                if (newY >= 20) {
Toast.makeText(SeActivity.this, "newY" + newY, 0).show();
变成黑怎么调过来
isRefresh = true;
d.show();
return;
}
// Z                if (newZ >= 20) {
Toast.makeText(SeActivity.this, "newZ" + newZ, 0).show();
如何做flash
isRefresh = true;
d.show();
return;
}
}
if (Type() == Sensor.TYPE_MAGNETIC_FIELD) {
// Log.e("TYPE_MAGNETIC_FIELD", ""+String());            }
if (Type() == Sensor.TYPE_PRESSURE) {
// Log.e("TYPE_PRESSURE", ""+String());            }
}
}
@Override
protected void onPause() {
// ACTIVITY消失时取消监听        sm.unregisterListener(listener);
}
}

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。