Android传感器 - 光强度传感器
Posted yayun0516
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Android传感器 - 光强度传感器相关的知识,希望对你有一定的参考价值。
android手机内部添加了光照强度传感器,可以实时监测手机周边环境的亮度,根据周边环境的亮度可以自动调节屏幕的亮度。下面通过一个实例看一下如何监测周边环境的亮度值。
主布局文件代码如下:
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent">
<TextView
android:id="@+id/text"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:gravity="center"
android:text=""
android:textSize="30sp" />
</RelativeLayout>
添加了一个TextView用来显示当前光强度值。
MainActivity.java代码如下:
public class MainActivity extends Activity
private SensorManager mSensorManager;
private float mLux;
private TextView mTextView;
private Sensor mSensor;
@Override
public void onCreate(Bundle savedInstanceState)
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
mTextView = (TextView) findViewById(R.id.text);
// 获取服务
mSensorManager = (SensorManager)
getSystemService(Context.SENSOR_SERVICE);
// 传感器种类-光照传感器
mSensor = mSensorManager
.getDefaultSensor(Sensor.TYPE_LIGHT);
mSensorManager.registerListener(listener, mSensor,
SensorManager.SENSOR_DELAY_NORMAL);
@Override
protected void onDestroy()
if (mSensorManager != null)
mSensorManager.unregisterListener(listener);
super.onDestroy();
private SensorEventListener listener =
new SensorEventListener()
public void onSensorChanged(SensorEvent event)
if (event.sensor.getType() == Sensor.TYPE_LIGHT)
// 获取光线强度
mLux = event.values[0];
mTextView.setText("当前光照强度为:" + mLux);
public void onAccuracyChanged(Sensor sensor, int accuracy)
;
通过代码可以看出,获得光照强度值的方式和获得加速度值的方式基本一致,这里在调用getDefaultSensor方法时传入的常量为Sensor.TYPE_LIGHT表示光照传感器,而event.values获得的数组中第一个float值即为光照强度值。
在真机上运行实例如下:
当前光照强度值将在TextView中显示出来,同时可以测试放在阳光下和放在阴暗处将得到不同的值。
Android中自带了“屏幕亮度跟随光照强度变化”的功能,参考下图:
如图中的“自动”开关,打开即可自动调节屏幕亮度了。我们可以不可以模拟一下这个功能呢?结合上面已经实现的光照值监听实现这个功能并不难。只需在上面的代码中添加改变屏幕亮度的方法:
public void changeWindowBrightness(int brightness)
Window window = this.getWindow();
WindowManager.LayoutParams layoutParams = window.getAttributes();
if (brightness == -1)
layoutParams.screenBrightness =
WindowManager.LayoutParams.BRIGHTNESS_OVERRIDE_NONE;
else
layoutParams.screenBrightness =
(brightness <= 0 ? 1 : brightness) / 255f;
window.setAttributes(layoutParams);
结合这个方法可以改变Android应用当前屏幕的亮度,不会影响其他APP的亮度,当前屏幕的默认值为WindowManager.LayoutParams.BRIGHTNESS_OVERRIDE_NONE。
将这个方法添加到上面的实例中并在onSensorChanged方法中调用,如下:
public void onSensorChanged(SensorEvent event)
if (event.sensor.getType() == Sensor.TYPE_LIGHT)
// 获取光线强度
mLux = event.values[0];
mTextView.setText("当前光照强度为:" + mLux);
changeWindowBrightness((int) mLux);
在真机中运行实例,然后放置在不同的光照环境中,可以看出在光照比较强的环境中屏幕亮度也较亮,反之在光照比较弱的环境中屏幕亮度也较暗,同时屏幕亮度的切换很及时。
更多优质文章关注微信公众号
请关注我的新浪微博:AndroidTip
CSDN博客:http://blog.csdn.NET/yayun0516
以上是关于Android传感器 - 光强度传感器的主要内容,如果未能解决你的问题,请参考以下文章
ESP32学习笔记(18)——光强度GY-30(BH1750)使用
HI3861学习笔记(16)——光强度GY-30(BH1750)使用