本文将介绍Android编程使用光线传感器获取光线强弱的方法【LightSensorManager封装类】的详细情况,。我们将通过案例分析、数据研究等多种方式,帮助您更全面地了解这个主题,同时也将涉及
本文将介绍Android编程使用光线传感器获取光线强弱的方法【LightSensorManager封装类】的详细情况,。我们将通过案例分析、数据研究等多种方式,帮助您更全面地了解这个主题,同时也将涉及一些关于Android AmbientLight Sensor 未获取值(返回 Null)、Android Light Sensor、Android Proximity Sensor近距离传感器P-Sensor、Android SensorManager.getOrientation()返回-PI / 2和PI / 2之间的音高的知识。
本文目录一览:- Android编程使用光线传感器获取光线强弱的方法【LightSensorManager封装类】
- Android AmbientLight Sensor 未获取值(返回 Null)
- Android Light Sensor
- Android Proximity Sensor近距离传感器P-Sensor
- Android SensorManager.getOrientation()返回-PI / 2和PI / 2之间的音高
Android编程使用光线传感器获取光线强弱的方法【LightSensorManager封装类】
本文实例讲述了Android编程使用光线传感器获取光线强弱的方法。分享给大家供大家参考,具体如下:
在Android开发中,有时我们需要获知设备所在环境的光线强弱情况,当然这需要我们设备拥有光线传感器。通常我们手机的屏幕自动亮度都是用光线传感器来实现的。该传感器在前置摄像头附近,此外,还有一个距离传感器。这里我们主要讲解如何使用Android手机的光线传感器。
下面是我简单封装的一个光线传感器管理类,主要提供了3个方法:
1.start()
:启动,在获取光照强度前调用。
2.stop()
:停止,在不再需要获取光照强度后调用。
3.getLux()
:获取光照强度,单位为勒克斯(lux)。
如果你需要额外的一些方法,可以根据返回的光照强度自行添加。下面是整个LightSensorManager类
import android.content.Context; import android.hardware.Sensor; import android.hardware.SensorEvent; import android.hardware.SensorEventListener; import android.hardware.SensorManager; import android.util.Log; public class LightSensorManager { private static final boolean DEBUG = true; private static final String TAG = "LightSensor"; private static LightSensorManager instance; private SensorManager mSensorManager; private LightSensorListener mLightSensorListener; private boolean mHasstarted = false; private LightSensorManager() { } public static LightSensorManager getInstance() { if (instance == null) { instance = new LightSensorManager(); } return instance; } public void start(Context context) { if (mHasstarted) { return; } mHasstarted = true; mSensorManager = (SensorManager) context.getApplicationContext().getSystemService(Context.SENSOR_SERVICE); Sensor lightSensor = mSensorManager.getDefaultSensor(Sensor.TYPE_LIGHT); // 获取光线传感器 if (lightSensor != null) { // 光线传感器存在时 mLightSensorListener = new LightSensorListener(); mSensorManager.registerListener(mLightSensorListener,lightSensor,SensorManager.SENSOR_DELAY_norMAL); // 注册事件监听 } } public void stop() { if (!mHasstarted || mSensorManager == null) { return; } mHasstarted = false; mSensorManager.unregisterListener(mLightSensorListener); } /** * 获取光线强度 */ public float getLux() { if (mLightSensorListener != null) { return mLightSensorListener.lux; } return -1.0f; // 默认返回-1,表示设备无光线传感器或者为调用start()方法 } private class LightSensorListener implements SensorEventListener { private float lux; // 光线强度 public void onAccuracyChanged(Sensor sensor,int accuracy) { } public void onSensorChanged(SensorEvent event) { if (event.sensor.getType() == Sensor.TYPE_LIGHT) { // 获取光线强度 lux = event.values[0]; if (DEBUG) { Log.d(TAG,"lux : " + lux); } } } } }
对于这个光线强度的值。越暗数值越低,最低应该是0,在白天室内大概有300左右,仅供参考,不知道不同的设备会不会存在一定误差。
调用程序就不贴了,通过log就可以很直接的看得到数据了。这个类在我的自定义相机里自动调节曝光程度使用到了,效果还是有的。
更多关于Android相关内容感兴趣的读者可查看本站专题:《Android开发入门与进阶教程》、《Android视图View技巧总结》、《Android编程之activity操作技巧总结》、《Android操作SQLite数据库技巧总结》、《Android操作json格式数据技巧总结》、《Android资源操作技巧汇总》及《Android控件用法总结》
希望本文所述对大家Android程序设计有所帮助。
Android AmbientLight Sensor 未获取值(返回 Null)
如何解决Android AmbientLight Sensor 未获取值(返回 Null)?
我正在开发一个带有光传感器的项目,但我的问题是光传感器总是返回 null,我的测试设备是三星 galaxy A40s,他有亮度自适应功能,当我查看三星规格时,我发现我的 galaxy A40s 集成了环境光传感器 [1]。 [1]:https://i.stack.imgur.com/Z0nAK.png 那么如何调用光传感器并获取数据呢? 有任何想法吗? 感谢您的帮助。
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)
Android Light Sensor
package zhangphil.sensor;
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;
public class MainActivity extends AppCompatActivity {
private SensorManager mSensorManager;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
startSensor();
}
/**
* 启动传感器。
*/
private void startSensor() {
mSensorManager = (SensorManager) this.getSystemService(Context.SENSOR_SERVICE);
Sensor mSensor = mSensorManager.getDefaultSensor(Sensor.TYPE_LIGHT);
if (mSensorManager == null || mSensor == null) {
throw new UnsupportedOperationException("设备不支持");
}
boolean isRegister = mSensorManager.registerListener(mSensorEventListener, mSensor, SensorManager.SENSOR_DELAY_NORMAL);
if (!isRegister) {
throw new UnsupportedOperationException();
}
}
private SensorEventListener mSensorEventListener = new SensorEventListener() {
@Override
public void onSensorChanged(SensorEvent sensorEvent) {
if (sensorEvent.sensor.getType() == Sensor.TYPE_LIGHT) {
/**
* 传感器传回的值。
*/
float value = sensorEvent.values[0];
Log.d("感光强度", String.valueOf(value));
}
}
@Override
public void onAccuracyChanged(Sensor sensor, int i) {
}
};
@Override
protected void onDestroy() {
super.onDestroy();
mSensorManager.unregisterListener(mSensorEventListener);
}
}
Android Proximity Sensor近距离传感器P-Sensor
package zhangphil.sensor;
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;
public class MainActivity extends AppCompatActivity {
private SensorManager mSensorManager;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
startSensor();
}
/**
* 启动传感器。
*/
private void startSensor() {
mSensorManager = (SensorManager) this.getSystemService(Context.SENSOR_SERVICE);
Sensor mSensor = mSensorManager.getDefaultSensor(Sensor.TYPE_PROXIMITY);
if (mSensorManager == null || mSensor == null) {
throw new UnsupportedOperationException("设备不支持");
}
boolean isRegister = mSensorManager.registerListener(mSensorEventListener, mSensor, SensorManager.SENSOR_DELAY_NORMAL);
if (!isRegister) {
throw new UnsupportedOperationException("设备不支持");
}
}
private SensorEventListener mSensorEventListener = new SensorEventListener() {
@Override
public void onSensorChanged(SensorEvent sensorEvent) {
float proximity=sensorEvent.values[0];
Log.d("近距离", String.valueOf(proximity));
}
@Override
public void onAccuracyChanged(Sensor sensor, int i) {
}
};
@Override
protected void onDestroy() {
super.onDestroy();
mSensorManager.unregisterListener(mSensorEventListener);
}
}
Android SensorManager.getOrientation()返回-PI / 2和PI / 2之间的音高
我设计的应用程序需要检查设备的方向(方位角,俯仰和滚动).我使用以下代码实现此目的:
@Override
public void onSensorChanged(SensorEvent event) {
if(event.sensor.getType() == Sensor.TYPE_ACCELEROMETER)
gravityMatrix = event.values.clone();// Fill gravityMatrix with accelerometer values
else if(event.sensor.getType() == Sensor.TYPE_MAGNETIC_FIELD)
geomagneticMatrix = event.values.clone();// Fill geomagneticMatrix with magnetic-field sensor values
if(gravityMatrix != null && geomagneticMatrix != null){
RMatrix = new float[16];
IMatrix = new float[16];
SensorManager.getRotationMatrix(RMatrix, IMatrix, gravityMatrix, geomagneticMatrix);// Retrieve RMatrix, necessary for the getorientation method
SensorManager.getorientation(RMatrix, orientation);// Get the current orientation of the device
}
}
现在,我可以从“方向” float []中获得方位角,俯仰和横滚值.方位角和侧倾值一切都很好(它返回正确的角度),但是当我打印音高值(orientation [1])时,我总是获取PI / 2和-PI / 2之间的角度.我不明白为什么?我无法获取大于PI / 2或小于-PI / 2的角度.一旦我的角度为-PI / 2,并且继续旋转设备(三星galaxy S2),该角度在达到PI / 2值后突然减小.
谁能解释为什么俯仰角如此罕见?
提前致谢!
解决方法:
螺距的计算公式为:pitch =(float)Math.asin(-RMatrix [7]); arcsin函数的范围是[-PI / 2,PI / 2],因此asin只能取-PI / 2和PI / 2之间的值.
关于Android编程使用光线传感器获取光线强弱的方法【LightSensorManager封装类】的介绍现已完结,谢谢您的耐心阅读,如果想了解更多关于Android AmbientLight Sensor 未获取值(返回 Null)、Android Light Sensor、Android Proximity Sensor近距离传感器P-Sensor、Android SensorManager.getOrientation()返回-PI / 2和PI / 2之间的音高的相关知识,请在本站寻找。
本文标签: