app根据光的强度变化主要是用到光的传感器 和 控制屏幕的亮度 ,
一、光传感器:
(1)获取传感器的服务:mSensorManager = (SensorManager)getSystemService(Context.SENSOR_SERVICE);
(2)获取光照传感器:mSensor = mSensorManager
.getDefaultSensor(Sensor.TYPE_LIGHT);
(3) 注册 和监视光照传感器 mSensorManager.registerListener(listener, mSensor, SensorManager.SENSOR_DELAY_NORMAL);
一、控制屏幕亮度:
(1) 获取系统亮度
(2) 设置系统亮度
(3) 关闭手机自动调节亮度
代码示例:
MainActivity.class
package com.boe.sensoractivity; import android.app.Activity; import android.content.ContentResolver; import android.content.Context; import android.graphics.Color; import android.hardware.Sensor; import android.hardware.SensorEvent; import android.hardware.SensorEventListener; import android.hardware.SensorManager; import android.os.Bundle; import android.provider.Settings; import android.support.v7.app.AppCompatActivity; import android.view.WindowManager; import android.widget.LinearLayout; import android.widget.TextView; public class MainActivity extends AppCompatActivity { private SensorManager mSensorManager; private Sensor mSensor; private TextView mTextView ,mTextView2; private LinearLayout ll; private float mLux ; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); mTextView2 = (TextView) findViewById(R.id.text2); mTextView = (TextView) findViewById(R.id.text); ll = (LinearLayout) findViewById(R.id.ll); mSensorManager = (SensorManager) getSystemService(Context.SENSOR_SERVICE); // 传感器种类-光照传感器 mSensor = mSensorManager .getDefaultSensor(Sensor.TYPE_LIGHT); //判断手机是否开启了 自动调节亮度 if(IsAutoBrightness(MainActivity.this)){ //关闭手机开启自动调节亮度 stopAutoBrightness(MainActivity.this); } //光传感器 mSensorManager.registerListener(listener, mSensor, SensorManager.SENSOR_DELAY_NORMAL); } // 光传感器监听 private SensorEventListener listener = new SensorEventListener() { @Override public void onSensorChanged(SensorEvent event) { if(event.sensor.getType() == Sensor.TYPE_LIGHT){ //获取光线强度 mLux = event.values[0]; mTextView2.setText("" + getScreenBrightness(MainActivity.this)); mTextView.setText("当前光照强度为:" + mLux); if (mLux < 70){ setBrightness(MainActivity.this, 80); //0最暗,255最亮。 mTextView.setTextColor(Color.WHITE); ll.setBackgroundColor(Color.BLACK); mTextView2.setTextColor(Color.WHITE); }else if(mLux >70 && mLux <120){ setBrightness(MainActivity.this,140); //0最暗,255最亮。 mTextView.setTextColor(Color.BLUE); ll.setBackgroundColor(Color.GRAY); }else{ setBrightness(MainActivity.this,255); //0最暗,255最亮。 mTextView.setTextColor(Color.BLACK); ll.setBackgroundColor(Color.WHITE); } } } @Override public void onAccuracyChanged(Sensor sensor, int accuracy) { } }; @Override protected void onResume() { super.onResume(); } @Override protected void onPause() { super.onPause(); } @Override protected void onDestroy() { super.onDestroy(); if (mSensorManager != null) { mSensorManager.unregisterListener(listener); } } /** * 修改屏幕亮度 * @param activity * @param brightness */ public static void setBrightness(Activity activity, int brightness){ WindowManager.LayoutParams lp = activity.getWindow().getAttributes(); lp.screenBrightness = Float.valueOf(brightness) * (1f / 255f); activity.getWindow().setAttributes(lp); } /** * 获取屏幕亮度 * @param activity * @return */ public static int getScreenBrightness(Activity activity){ int nowBrightnessValue = 0; ContentResolver resolver = activity.getContentResolver(); try{ nowBrightnessValue = Settings.System.getInt(resolver,Settings.System.SCREEN_BRIGHTNESS); }catch (Exception e){ e.printStackTrace(); } return nowBrightnessValue; } //判断是否开启了自动调节亮度 public static boolean IsAutoBrightness(Context context){ boolean IsAutoBrightness = false ; try{ IsAutoBrightness = Settings.System.getInt( context.getContentResolver(), Settings.System.SCREEN_BRIGHTNESS_MODE) == Settings.System.SCREEN_BRIGHTNESS_MODE_AUTOMATIC; }catch (Exception e){ e.printStackTrace(); } return IsAutoBrightness; } //停止自动亮度调节、 public static void stopAutoBrightness(Context context){ Settings.System.putInt(context.getContentResolver(),Settings.System.SCREEN_BRIGHTNESS_MODE, Settings.System.SCREEN_BRIGHTNESS_MODE_MANUAL); } //开启自动亮度调节 public static void startAutoBrightness(Context context){ Settings.System.putInt(context.getContentResolver(), Settings.System.SCREEN_BRIGHTNESS_MODE, Settings.System.SCREEN_BRIGHTNESS_MODE_AUTOMATIC); } }
activity_main.xml
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" android:id="@+id/ll" android:orientation="vertical" tools:context="com.boe.sensoractivity.MainActivity"> <TextView android:id="@+id/text" android:layout_width="match_parent" android:layout_height="match_parent" android:layout_weight="1" android:gravity="center" android:text="" android:textSize="30sp" /> <TextView android:id="@+id/text2" android:layout_width="match_parent" android:layout_height="match_parent" android:gravity="center" android:text="" android:layout_weight="1" android:textSize="30sp" /> </LinearLayout>