app随着光照强度变化总结

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>




评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值