Android利用Senser实现不同的传感器
短信预约 -IT技能 免费直播动态提醒
传感器有不同的类型,以下是我列出的光线,加速度,风向传感器,在测试不同传感器的时候都需将传感器管理的onResume中sensorManager.registerListener(myListner,sensorOri,sensorManager.SENSOR_DELAY_UI);
第二个参数改为相应的传感器,此dem中我加入了一张指南针图片作为示例:
activity_main.xml
<Button
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="查看所有支持的传感类型"
android:onClick="getAllSensors"
/>
<TextView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:textSize="30sp"
android:id="@+id/tv_main_result"
/>
<ImageView
android:layout_width="match_parent"
android:layout_height="match_parent"
android:class="lazy" data-src="@drawable/sounth"
android:id="@+id/iv_main_images"
/>
java代码中注释掉的部分都是一种传感器的测试。
MainActivity.java
package com.example.cindy_sounth;
import android.content.Context;
import android.hardware.Sensor;
import android.hardware.SensorEvent;
import android.hardware.SensorEventListener;
import android.hardware.SensorManager;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.view.WindowManager;
import android.view.animation.RotateAnimation;
import android.widget.ImageView;
import android.widget.TextView;
import java.util.List;
public class MainActivity extends AppCompatActivity {
private SensorManager sensorManager;
private Sensor sensorLight;
private Sensor sensorAcc;
private Sensor sensorOri;
private TextView tv_main_result;
private MyListner myListner;
private ImageView iv_main_images;
private float current;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
//得到图片
iv_main_images = (ImageView) findViewById(R.id.iv_main_images);
tv_main_result = (TextView) findViewById(R.id.tv_main_result);
//得到传感器的管理者
sensorManager = (SensorManager)getSystemService(Context.SENSOR_SERVICE);
//得到光线传感器
// sensorLight = sensorManager.getDefaultSensor(Sensor.TYPE_LIGHT);
//获得加速度传感器
// sensorAcc = sensorManager.getDefaultSensor(Sensor.TYPE_ACCELEROMETER);
//获取风向传感器
sensorOri = sensorManager.getDefaultSensor(Sensor.TYPE_ORIENTATION);
myListner = new MyListner();
}
//注册一个监听(监听某一个传感器的值)
@Override
protected void onResume() {
super.onResume();
sensorManager.registerListener(myListner,sensorOri,sensorManager.SENSOR_DELAY_UI);
}
class MyListner implements SensorEventListener{
private WindowManager.LayoutParams layoutParams;
//当你的值发生改变
@Override
public void onSensorChanged(SensorEvent event) {
float[] f=event.values;
//测试获取光线传感器的值(光线值)
// float light= f[0];
// tv_main_result.setText(light+"");
//测试获得加速度传感器
// float x= f[0];
// float y= f[1];
// float z= f[2];
// tv_main_result.setText("x="+x+"\ny="+y+"\nz="+z);
//测试获取风向传感器
// float x= f[0];
// float y= f[1];
// float z= f[2];
// tv_main_result.setText("x="+x+"\ny="+y+"\nz="+z);
//加图片测试指南针
float x= f[0];
float y= f[1];
float z= f[2];
tv_main_result.setText("x="+x+"\ny="+y+"\nz="+z);
//实例化旋转动画
RotateAnimation rotateAnimation=new RotateAnimation(current,-x,RotateAnimation.RELATIVE_TO_SELF,0.5f,RotateAnimation.RELATIVE_TO_SELF,0.5f);
rotateAnimation.setDuration(200);
current=-x;
iv_main_images.startAnimation(rotateAnimation);
//改变屏幕的亮度
//先拿到屏幕
// WindowManager.LayoutParams layoutParams= getWindow().getAttributes();
// layoutParams.screenBrightness=light/225f;
// getWindow().setAttributes(layoutParams);
}
//当值发生精度改变
@Override
public void onAccuracyChanged(Sensor sensor, int accuracy) {
}
}
@Override
protected void onDestroy() {
super.onDestroy();
sensorManager.unregisterListener(myListner);
}
public void getAllSensors(View view){
List<Sensor> sensors= sensorManager.getSensorList(Sensor.TYPE_ALL);
for (Sensor sensor : sensors) {
Log.i("test", sensor.getName());
// sensor.getPower();
}
}
}
您可能感兴趣的文章:Android 利用方向传感器实现指南针具体步骤Android利用方向传感器获得手机的相对角度实例说明Android编程中光线传感器的调用方法详解Android编程使用加速度传感器实现摇一摇功能及优化的方法详解Android编程实现获取所有传感器数据的方法Android利用Sensor(传感器)实现水平仪功能Android 传感器--光照传感器详解及使用Android 重力传感器在游戏开发中的应用Android重力传感器实现滚动的弹球android 传感器(OnSensorChanged)使用介绍Android编程之方向传感器用法示例
免责声明:
① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。
② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341