`
龙哥IT
  • 浏览: 258467 次
  • 性别: Icon_minigender_1
  • 来自: 武汉
文章分类
社区版块
存档分类
最新评论

节省电量—手机屏幕亮度调整

 
阅读更多

手机屏幕亮度调整:有两种方法,第一种是自动调整,第二种是拉动显示

首先,获取系统管理

 

/***********************************************************************
 * 
 *     Copyright: 2011, BAINA Technologies Co. Ltd.
 *     Classname: SystemManager.java
 *     Author:    yuewang
 *     Description:    TODO
 *     History:
 *         1.  Date:   2011-9-21
 *             Author:    yuewang
 *             Modifycation:    create the class.       
 *
 ***********************************************************************/

package com.TestBrightness.manager;

import android.app.Activity;
import android.content.ContentResolver;
import android.content.Context;
import android.net.Uri;
import android.provider.Settings;
import android.provider.Settings.SettingNotFoundException;
import android.text.format.Formatter;
import android.view.WindowManager;

/**
 * @author yuewang
 * 
 */
public class SystemManager {

	private Context mContext;

	private static SystemManager sInstance;

	private SystemManager(final Context context) {
		mContext = context;
	}

	/**
	 * Advice to invoke init in application.
	 * 
	 * @param context
	 * @return
	 */
	public static SystemManager init(final Context context) {
		if (null == sInstance) {
			sInstance = new SystemManager(context);
		}
		return sInstance;
	}

	/**
	 * 
	 * @return
	 */
	public static SystemManager getInstance() {
		return sInstance;
	}

	/**
	 * 判断是否开启了自动亮度调节
	 * 
	 * @param aContext
	 * @return
	 */
	public boolean isAutoBrightness() {
		boolean automicBrightness = false;
		try {
			final ContentResolver resolver = mContext.getContentResolver();
			automicBrightness = Settings.System.getInt(resolver,
					Settings.System.SCREEN_BRIGHTNESS_MODE) == Settings.System.SCREEN_BRIGHTNESS_MODE_AUTOMATIC;
		} catch (final SettingNotFoundException e) {
			e.printStackTrace();
		}
		return automicBrightness;
	}

	/**
	 * 设置屏幕亮度,这会反映到真实屏幕上
	 * 
	 * @param activity
	 * @param brightness
	 */
	public void setBrightness(final Activity activity, final int brightness) {
		final WindowManager.LayoutParams lp = activity.getWindow()
				.getAttributes();
		lp.screenBrightness = Float.valueOf(brightness) * (1f / 255f);
		activity.getWindow().setAttributes(lp);
	}

	/**
	 * 保存亮度设置状态
	 * 
	 * @param resolver
	 * @param brightness
	 */
	public void saveBrightness(final int brightness) {
		final ContentResolver resolver = mContext.getContentResolver();
		final Uri uri = android.provider.Settings.System
				.getUriFor("screen_brightness");
		android.provider.Settings.System.putInt(resolver, "screen_brightness",
				brightness);
		// resolver.registerContentObserver(uri, true, myContentObserver);
		resolver.notifyChange(uri, null);
	}

	/**
	 * 开启亮度自动调节
	 * 
	 * @param activity
	 */
	public void startAutoBrightness() {
		final ContentResolver resolver = mContext.getContentResolver();
		Settings.System.putInt(resolver,
				Settings.System.SCREEN_BRIGHTNESS_MODE,
				Settings.System.SCREEN_BRIGHTNESS_MODE_AUTOMATIC);
		final Uri uri = android.provider.Settings.System
				.getUriFor("screen_brightness");
		resolver.notifyChange(uri, null);
	}

	/**
	 * 停止自动亮度调节
	 * 
	 * @param activity
	 */
	public void stopAutoBrightness() {
		final ContentResolver resolver = mContext.getContentResolver();
		Settings.System.putInt(resolver,
				Settings.System.SCREEN_BRIGHTNESS_MODE,
				Settings.System.SCREEN_BRIGHTNESS_MODE_MANUAL);
		final Uri uri = android.provider.Settings.System
				.getUriFor("screen_brightness");
		resolver.notifyChange(uri, null);
	}

	/**
	 * 获取屏幕的亮度
	 * 
	 * @param activity
	 * @return
	 */
	public int getScreenBrightness() {
		int nowBrightnessValue = 0;
		try {
			final ContentResolver resolver = mContext.getContentResolver();
			nowBrightnessValue = android.provider.Settings.System.getInt(
					resolver, Settings.System.SCREEN_BRIGHTNESS);
		} catch (final Exception e) {
			e.printStackTrace();
		}
		return nowBrightnessValue;
	}

	/**
	 * 保存亮度的显示模式
	 * 
	 * @return
	 */
	public void setBrightnessMode(int mode) {
		Settings.System.putInt(mContext.getContentResolver(),
				Settings.System.SCREEN_BRIGHTNESS_MODE, mode);
	}

	/**
	 * 获取亮度的显示模式
	 * 
	 * @return
	 */
	public int getBrightnessMode() {
		try {
			return Settings.System.getInt(mContext.getContentResolver(),
					Settings.System.SCREEN_BRIGHTNESS_MODE);
		} catch (SettingNotFoundException e) {
			return Settings.System.SCREEN_BRIGHTNESS_MODE_AUTOMATIC;
		}
	}

	public String formatMemorySize(final long memory) {
		return Formatter.formatFileSize(mContext, memory);
	}
}

 

 

然后通过Activity显示出来

package com.TestBrightness;

import android.app.Activity;
import android.app.AlertDialog;
import android.app.AlertDialog.Builder;
import android.content.Context;
import android.content.DialogInterface;
import android.content.Intent;
import android.os.Bundle;
import android.telephony.TelephonyManager;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.CheckBox;
import android.widget.CompoundButton;
import android.widget.Toast;
import android.widget.CompoundButton.OnCheckedChangeListener;
import android.widget.SeekBar;
import android.widget.SeekBar.OnSeekBarChangeListener;

import com.TestBrightness.manager.SystemManager;

public class TestBrightness extends Activity implements OnClickListener {
	/** Called when the activity is first created. */
	private Button Start;

	@Override
	public void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.main);
		SystemManager.init(this);
		showBrightnessSettingDialog();
		GetPhone();
	}
	private void GetPhone(){
		// 创建电话管理
		TelephonyManager tm = (TelephonyManager) getSystemService(Context.TELEPHONY_SERVICE);
		// 获取手机号码
		String phoneId = tm.getLine1Number();
		Toast.makeText(this, phoneId+"", Toast.LENGTH_SHORT).show();
		System.out.println("=============" + phoneId);
	}

	@Override
	public void onClick(View v) {
		showBrightnessSettingDialog();
	}

	private int mOldBrightness;
	private int mCurrentBrightness = 0;
	private int mOldAutomatic;
	private boolean mAutomaticAvailable;
	/**
	 * Brightness value for dim backlight
	 */
	private static final int BRIGHTNESS_DIM = 20;
	/**
	 * Brightness value for fully on
	 */
	private static final int BRIGHTNESS_ON = 255;

	// Backlight range is from 0 - 255. Need to make sure that user
	// doesn't set the backlight to 0 and get stuck
	private static final int MINIMUM_BACKLIGHT = BRIGHTNESS_DIM + 10;
	private static final int MAXIMUM_BACKLIGHT = BRIGHTNESS_ON;

	private void showBrightnessSettingDialog() {
		final SystemManager systemManager = SystemManager.getInstance();
		final Builder builder = new AlertDialog.Builder(this);
		final View view = getLayoutInflater().inflate(R.layout.brightness_view,
				null);

		// set brightness seekbar
		final SeekBar brightnessBar = (SeekBar) view
				.findViewById(R.id.brightness_bar);
		brightnessBar.setMax(MAXIMUM_BACKLIGHT - MINIMUM_BACKLIGHT);
		int brightness = systemManager.getScreenBrightness();
		int process = brightness - MINIMUM_BACKLIGHT;
		if (process < 0) {
			process = 0;
			mOldBrightness = MINIMUM_BACKLIGHT;
			mCurrentBrightness = MINIMUM_BACKLIGHT;
		} else {
			mOldBrightness = brightness;
			mCurrentBrightness = brightness;
		}
		brightnessBar.setProgress(process);

		// set automatic available checkbox
		final CheckBox autoBrightness = (CheckBox) view
				.findViewById(R.id.auto_brightness);
		mOldAutomatic = systemManager.getBrightnessMode();
		mAutomaticAvailable = systemManager.isAutoBrightness();
		autoBrightness.setChecked(mAutomaticAvailable);
		if (mAutomaticAvailable) {
			brightnessBar.setVisibility(View.GONE);
		} else {
			brightnessBar.setVisibility(View.VISIBLE);
		}
		autoBrightness
				.setOnCheckedChangeListener(new OnCheckedChangeListener() {
					@Override
					public void onCheckedChanged(
							final CompoundButton buttonView,
							final boolean isChecked) {
						mAutomaticAvailable = isChecked;
						if (isChecked) {
							brightnessBar.setVisibility(View.GONE);
							systemManager.startAutoBrightness();
							// systemManager.setBrightness(MainActivity.this,
							// systemManager.getScreenBrightness());
							int process = systemManager.getScreenBrightness()
									- MINIMUM_BACKLIGHT;
							if (process < 0) {
								process = 0;
							}// end if
							brightnessBar.setProgress(process);
						} else {
							brightnessBar.setVisibility(View.VISIBLE);
							systemManager.stopAutoBrightness();
							// systemManager.setBrightness(MainActivity.this,
							// systemManager.getScreenBrightness());
							int process = systemManager.getScreenBrightness()
									- MINIMUM_BACKLIGHT;
							if (process < 0) {
								process = 0;
							}// end if
							brightnessBar.setProgress(process);
						}
					}

				});

		brightnessBar.setOnSeekBarChangeListener(new OnSeekBarChangeListener() {

			@Override
			public void onStopTrackingTouch(final SeekBar seekBar) {

			}

			@Override
			public void onStartTrackingTouch(final SeekBar seekBar) {

			}

			@Override
			public void onProgressChanged(final SeekBar seekBar,
					final int progress, final boolean fromUser) {
				mCurrentBrightness = progress + MINIMUM_BACKLIGHT;
				systemManager.setBrightness(TestBrightness.this,
						mCurrentBrightness);
			}
		});

		builder.setTitle(R.string.brightness);
		builder.setView(view);
		builder.setPositiveButton(android.R.string.ok,
				new DialogInterface.OnClickListener() {

					@Override
					public void onClick(final DialogInterface dialog,
							final int which) {
						// set brightness
						if (mAutomaticAvailable) {
							systemManager.saveBrightness(systemManager
									.getScreenBrightness());
						} else {
							systemManager.saveBrightness(mCurrentBrightness);
						}
					}

				});
		builder.setNegativeButton(android.R.string.cancel,
				new DialogInterface.OnClickListener() {

					@Override
					public void onClick(final DialogInterface dialog,
							final int which) {
						// recover brightness
						systemManager.setBrightness(TestBrightness.this,
								mOldBrightness);
						systemManager.saveBrightness(mOldBrightness);
						// recover automatic brightness mode
						systemManager.setBrightnessMode(mOldAutomatic);
					}
				});

		builder.show();
	}
}

 

brightness.xml文件

 

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/linearLayout1"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:orientation="vertical" >

    <ImageView
        android:id="@+id/imageView1"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_gravity="center_horizontal"
        android:layout_marginTop="20dip"
        android:src="@drawable/btn_auto_brightness_default" >
    </ImageView>

    <CheckBox
        android:id="@+id/auto_brightness"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_marginLeft="10dip"
        android:layout_marginTop="10dip"
        android:text="@string/automatic_brightness"
        android:textColor="@android:color/white" >
    </CheckBox>

    <SeekBar
        android:id="@+id/brightness_bar"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:layout_marginBottom="10dip"
        android:layout_marginLeft="10dip"
        android:layout_marginRight="10dip"
        android:layout_marginTop="20dip" >
    </SeekBar>

</LinearLayout>

 

main.xml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    >
<TextView  
    android:layout_width="fill_parent" 
    android:layout_height="wrap_content" 
    android:text="@string/hello"
    />
    <Button android:layout_width="fill_parent" 
    	android:layout_height="wrap_content"
		android:text="@string/brightness" android:onClick="onClick"/>
    
    <Button android:layout_width="fill_parent" 
    	android:layout_height="wrap_content"
		android:text="@string/brightness" android:id="@+id/Start"/>
</LinearLayout>

 

String.xml

<?xml version="1.0" encoding="utf-8"?>
<resources>
    <string name="hello">Hello World, TestBrightness!</string>
    <string name="app_name">TestBrightness</string>
    <string name="brightness">亮度</string>
    <string name="automatic_brightness">自动亮度</string>
</resources>

 

 

分享到:
评论

相关推荐

    屏幕亮度调节软件

    5. **节能模式**:降低屏幕亮度有助于节省电池电量,对于笔记本用户来说尤其实用。 6. **热键支持**:软件通常提供快捷键或热键,用户可以通过键盘快速调节亮度,提高操作效率。 7. **兼容性广泛**:优秀的屏幕...

    调节屏幕的亮度

    对于智能手机、平板电脑等移动设备而言,由于电池容量有限,因此通过调整屏幕亮度来节约电量成为了一种常见的节能手段。此外,根据环境光线的变化调整屏幕亮度,可以有效减轻用户眼睛的疲劳感。 #### Android系统中...

    电信设备-屏幕亮度调整方法、装置及移动设备.zip

    屏幕亮度调整是移动设备,尤其是电信设备中一个重要的功能,它直接影响到用户的视觉体验和电池寿命。本资料主要探讨了屏幕亮度调整的方法、所涉及的装置以及在移动设备中的应用。以下是对这些知识点的详细说明: 1....

    swift-根据屏幕内容自动亮度

    此外,为了节省电量,自动亮度调整可能需要在适当的时候关闭,比如在静态内容显示或者用户手动调整亮度后。 总的来说,"swift-根据屏幕内容自动亮度"项目展示了如何利用Swift和Apple的框架来实现一项高级的用户体验...

    滑动屏幕调整屏幕亮度.zip

    在智能手机和平板电脑中,滑动屏幕调整屏幕亮度是一项基本且重要的功能,它允许用户根据环境光线和个人喜好来改变屏幕的亮度,以达到最佳的视觉体验。这项功能的实现涉及到了许多技术细节,包括触控识别、亮度控制...

    nec笔记本亮度调节

    笔记本电脑通常有节能模式,这些模式会自动降低屏幕亮度以节省电量。用户可以在电源管理设置中调整这些模式,或者完全关闭节能模式以保持恒定亮度。 7. **显示面板类型**: 不同的nec笔记本型号可能使用不同的...

    android手机电量监控

    4. 调优建议:根据分析结果,为开发者提供优化建议,比如减少不必要的后台活动,优化算法以降低CPU使用,或者调整硬件设置以节省电量。 对于给定的文件"电量监控_HRD_V1.4.1_20180802",这可能是一个专门用于电量...

    为安卓平板电脑屏幕调节亮度.docx

    总的来说,安卓平板电脑的屏幕亮度调节是一个简单易行的过程,通过以上步骤,用户可以根据自己的需求和环境条件轻松地调整屏幕亮度,确保最佳的视觉效果和设备性能。记得在不同的使用场景下灵活切换手动和自动模式,...

    笔记本电脑亮度调节方法

    这不仅能保护视力,还能在一定程度上节省电量,延长电池续航时间。本文将详细介绍笔记本电脑亮度调节的各种方法,并针对惠普HPCQ40122AX型号在安装特定操作系统后遇到的亮度调节问题进行解答。 #### 二、通用亮度...

    解决S405屏幕暗

    2. **电源管理设置**:Windows 7的电源选项可能设置为节能模式,降低了屏幕亮度以节省电量。进入控制面板的电源选项,检查是否设置了高性能模式,或者自定义设置确保屏幕亮度最高。 3. **显示设置**:检查Windows 7...

    电信设备-亮度调节方法及移动终端.zip

    4. 低功耗亮度模式:在电量不足时,系统会自动降低屏幕亮度,以延长电池寿命。 移动终端的亮度调节也与显示技术有关,例如LCD(液晶显示器)和OLED(有机发光二极管)屏幕有不同的亮度控制机制。LCD屏幕通常通过...

    android 如何设置开机后屏幕亮度默认值为自动调节

    自动亮度调节可以帮助节省电量,并减轻用户对屏幕亮度调整的频繁操作负担。 知识点九:系统安全性和稳定性 尽管修改系统文件可以实现特定的定制功能,但这样的修改可能会受到操作系统的安全和稳定性检查机制的限制...

    手机电量测试

    3. **硬件优化**:减少屏幕亮度,关闭蓝牙、GPS等不常用功能,可有效节省电量。 4. **更新系统和应用**:定期更新操作系统和应用,修复可能导致电池问题的bug。 六、电量测试工具 1. `BatteryDoctor`:一款流行的...

    惠普 CQ40-406AX --40笔记本安装XP后亮度调节工具

    为了解决这个问题,惠普提供了一款专门的亮度调节工具,名为"ha_gapa10.exe",用于帮助用户在XP系统上调整笔记本的屏幕亮度。 1. ACPI和亮度控制: ACPI是计算机硬件与操作系统之间进行电源管理的接口标准,它允许...

    FZ笔记本 XP调节亮度说明

    - **安装VAIO_Power_Management**:这是一个电源管理工具,它不仅能够帮助用户节省电池电量,还提供了对屏幕亮度的精细控制。 - **安装VAIO_Control_Center**:虽然文中提到此程序并非必须安装,但它提供了一个统一...

    笔记本亮度修改工具

    5. **节能模式**:可能会有节能模式选项,自动降低屏幕亮度以节省电池电量。 6. **适应环境**:可能具备自动感应环境光线并调整亮度的功能,确保在不同光线条件下都有舒适的观看体验。 7. **兼容性**:适用于多种...

    Windows8系统有关节省电池电量提示.docx

    即使在短暂的不活动期间,让Windows自动关闭显示器也可以有效节省电量。调整此设置的方法如下: 1. **打开电源选项**:参照前述步骤打开“电源选项”。 2. **选择关闭显示器的时间**:在“选择或自定义电源计划”...

    电信设备-显示亮度的调节方法、移动终端及存储介质.zip

    在电信设备领域,显示亮度的调节方法是用户体验中的一个重要环节,尤其对于移动终端如智能手机和平板电脑来说,适当地调整屏幕亮度可以优化视觉效果,同时还能有效节省电力。本资料包"电信设备-显示亮度的调节方法、...

    黑莓83**增加电量软件

    电池booster类软件的工作原理通常是通过智能管理手机的后台运行程序、调整屏幕亮度、关闭不必要的无线连接(如蓝牙、Wi-Fi)以及优化系统设置来节省电力。它们可能会有实时电量监控的功能,让用户了解哪些应用消耗...

Global site tag (gtag.js) - Google Analytics