package com.example.bs;
import java.lang.reflect.Field;
import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;
import android.app.Activity;
import android.content.ContentResolver;
import android.content.Context;
import android.database.ContentObserver;
import android.os.Bundle;
import android.os.Handler;
import android.os.PowerManager;
import android.provider.Settings;
import android.provider.Settings.SettingNotFoundException;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.Toast;
public class BrightnessSwitch extends Activity implements OnClickListener
{
private Button mBrightness;
private static final int LIGHT_NORMAL = 64;
private static final int LIGHT_50_PERCENT = 127;
private static final int LIGHT_75_PERCENT = 191;
private static final int LIGHT_100_PERCENT = 255;
private static final int LIGHT_AUTO = 0;
private static final int LIGHT_ERR = -1;
private BrightObserver mBrightObserver;
private PowerManager mPowerManager;
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
mPowerManager = (PowerManager)getSystemService(Context.POWER_SERVICE);
mBrightObserver = new BrightObserver(new Handler());
mBrightness = (Button)findViewById(R.id.bright);
refreshButton();
mBrightness.setOnClickListener(this);
}
@Override
protected void onDestroy()
{
// TODO Auto-generated method stub
super.onDestroy();
mBrightObserver.stopObserver();
}
@Override
protected void onResume()
{
// TODO Auto-generated method stub
super.onResume();
mBrightObserver.startObserver();
}
//更新按钮
private void refreshButton()
{
switch (getBrightStatus())
{
case LIGHT_NORMAL:
mBrightness.setText(R.string.light_50percent);
break;
case LIGHT_50_PERCENT:
mBrightness.setText(R.string.light_75percent);
break;
case LIGHT_75_PERCENT:
mBrightness.setText(R.string.light_100percent);
break;
case LIGHT_100_PERCENT:
mBrightness.setText(R.string.light_auto);
break;
case LIGHT_AUTO:
mBrightness.setText(R.string.light_normal);
break;
case LIGHT_ERR:
mBrightness.setText(R.string.light_err);
break;
}
}
//得到当前亮度值状态
private int getBrightStatus()
{
// TODO Auto-generated method stub
int light = 0;
boolean auto = false;
ContentResolver cr = getContentResolver();
try
{
auto = Settings.System.getInt(cr,
Settings.System.SCREEN_BRIGHTNESS_MODE) == Settings.System.SCREEN_BRIGHTNESS_MODE_AUTOMATIC;
if (!auto)
{
light = android.provider.Settings.System.getInt(cr,
Settings.System.SCREEN_BRIGHTNESS, -1);
if (light > 0 && light <= LIGHT_NORMAL)
{
return LIGHT_NORMAL;
}
else if (light > LIGHT_NORMAL && light <= LIGHT_50_PERCENT)
{
return LIGHT_50_PERCENT;
}
else if (light > LIGHT_50_PERCENT && light <= LIGHT_75_PERCENT)
{
return LIGHT_75_PERCENT;
}
else if (light > LIGHT_75_PERCENT && light <= LIGHT_100_PERCENT)
{
return LIGHT_100_PERCENT;
}
}
else
{
return LIGHT_AUTO;
}
}
catch (SettingNotFoundException e1)
{
// TODO Auto-generated catch block
e1.printStackTrace();
}
return LIGHT_ERR;
}
private void setBrightStatus()
{
int light = 0;
switch (getBrightStatus())
{
case LIGHT_NORMAL:
light = LIGHT_50_PERCENT - 1;
break;
case LIGHT_50_PERCENT:
light = LIGHT_75_PERCENT - 1;
break;
case LIGHT_75_PERCENT:
light = LIGHT_100_PERCENT - 1;
break;
case LIGHT_100_PERCENT:
startAutoBrightness(getContentResolver());
break;
case LIGHT_AUTO:
light = LIGHT_NORMAL - 1;
stopAutoBrightness(getContentResolver());
break;
case LIGHT_ERR:
light = LIGHT_NORMAL - 1;
break;
}
setLight(light);
setScreenLightValue(getContentResolver(), light);
}
/*因为PowerManager提供的函数setBacklightBrightness接口是隐藏的,
* 所以在基于第三方开发调用该函数时,只能通过反射实现在运行时调用
*/
private void setLight(int light)
{
try
{
//得到PowerManager类对应的Class对象
Class<?> pmClass = Class.forName(mPowerManager.getClass().getName());
//得到PowerManager类中的成员mService(mService为PowerManagerService类型)
Field field = pmClass.getDeclaredField("mService");
field.setAccessible(true);
//实例化mService
Object iPM = field.get(mPowerManager);
//得到PowerManagerService对应的Class对象
Class<?> iPMClass = Class.forName(iPM.getClass().getName());
/*得到PowerManagerService的函数setBacklightBrightness对应的Method对象,
* PowerManager的函数setBacklightBrightness实现在PowerManagerService中
*/
Method method = iPMClass.getDeclaredMethod("setBacklightBrightness", int.class);
method.setAccessible(true);
//调用实现PowerManagerService的setBacklightBrightness
method.invoke(iPM, light);
}
catch (ClassNotFoundException e)
{
// TODO Auto-generated catch block
e.printStackTrace();
}
catch (NoSuchFieldException e)
{
// TODO Auto-generated catch block
e.printStackTrace();
}
catch (IllegalArgumentException e)
{
// TODO Auto-generated catch block
e.printStackTrace();
}
catch (IllegalAccessException e)
{
// TODO Auto-generated catch block
e.printStackTrace();
}
catch (NoSuchMethodException e)
{
// TODO Auto-generated catch block
e.printStackTrace();
}
catch (InvocationTargetException e)
{
// TODO Auto-generated catch block
e.printStackTrace();
}
}
@Override
public void onClick(View v)
{
// TODO Auto-generated method stub
setBrightStatus();
}
//启动自动调节亮度
public void startAutoBrightness(ContentResolver cr)
{
Settings.System.putInt(cr, Settings.System.SCREEN_BRIGHTNESS_MODE,
Settings.System.SCREEN_BRIGHTNESS_MODE_AUTOMATIC);
}
//关闭自动调节亮度
public void stopAutoBrightness(ContentResolver cr)
{
Settings.System.putInt(cr, Settings.System.SCREEN_BRIGHTNESS_MODE,
Settings.System.SCREEN_BRIGHTNESS_MODE_MANUAL);
}
//设置改变亮度值
public void setScreenLightValue(ContentResolver resolver, int value)
{
android.provider.Settings.System.putInt(resolver, Settings.System.SCREEN_BRIGHTNESS,
value);
}
private class BrightObserver extends ContentObserver
{
ContentResolver mResolver;
public BrightObserver(Handler handler)
{
super(handler);
mResolver = getContentResolver();
}
@Override
public void onChange(boolean selfChange)
{
// TODO Auto-generated method stub
super.onChange(selfChange);
refreshButton();
Toast.makeText(BrightnessSwitch.this, "亮度设置有改变", Toast.LENGTH_SHORT).show();
}
//注册观察
public void startObserver()
{
mResolver.registerContentObserver(Settings.System
.getUriFor(Settings.System.SCREEN_BRIGHTNESS), false,
this);
mResolver.registerContentObserver(Settings.System
.getUriFor(Settings.System.SCREEN_BRIGHTNESS_MODE), false,
this);
}
//解除观察
public void stopObserver()
{
mResolver.unregisterContentObserver(this);
}
}
}
没有合适的资源?快使用搜索试试~ 我知道了~
Android快捷开关实现Demo
共308个文件
class:92个
png:72个
xml:36个
5星 · 超过95%的资源 需积分: 50 281 下载量 119 浏览量
2013-06-13
15:25:25
上传
评论 8
收藏 693KB ZIP 举报
温馨提示
Wifi开关、移动数据开关、亮度设置开关、蓝牙开关、飞行模式开关.....
资源推荐
资源详情
资源评论
收起资源包目录
Android快捷开关实现Demo (308个子文件)
resources.ap_ 11KB
resources.ap_ 11KB
resources.ap_ 11KB
resources.ap_ 11KB
resources.ap_ 11KB
resources.ap_ 11KB
resources.ap_ 11KB
resources.ap_ 11KB
resources.ap_ 11KB
resources.ap_ 11KB
resources.ap_ 10KB
resources.ap_ 10KB
BrightnessSwitch.apk 17KB
MobileDataSwitchTest.apk 16KB
BluetoothSwitch.apk 15KB
AirPlaneModeSwitchTest.apk 15KB
ScreenRotationSwitch.apk 15KB
SyncSwitchTest.apk 15KB
SilentSwitchTest.apk 15KB
WifiSwitchTest.apk 15KB
ShutDownSwitch.apk 15KB
GpsSwitchTest.apk 14KB
LockScreenSwitchTest.apk 14KB
RebootSwitch.apk 14KB
proguard.cfg 1KB
proguard.cfg 1KB
proguard.cfg 1KB
proguard.cfg 1KB
proguard.cfg 1KB
proguard.cfg 1KB
proguard.cfg 1KB
proguard.cfg 1KB
proguard.cfg 1KB
proguard.cfg 1KB
proguard.cfg 1KB
proguard.cfg 1KB
BrightnessSwitch.class 6KB
MobileDataSwitchTest.class 5KB
AirplaneModeSwitchTest.class 3KB
ScreenRotationSwitch.class 3KB
BluetoothSwitch.class 3KB
SyncSwitchTest.class 3KB
SilentSwitchTes.class 3KB
WifiSwitchTest.class 2KB
GpsSwitchTest.class 2KB
ScreenRotationSwitch$RotationObserver.class 2KB
BrightnessSwitch$BrightObserver.class 2KB
BluetoothSwitch$TestChange.class 1KB
AirplaneModeSwitchTest$TestChange.class 1KB
ShutDownSwitch.class 1KB
MobileDataSwitchTest$TestChange.class 1KB
LockScreenSwitchTest.class 1KB
SyncSwitchTest$TestChange.class 1KB
SilentSwitchTes$TestChange.class 1KB
WifiSwitchTest$TestChange.class 1KB
RebootSwitch.class 1KB
R$string.class 636B
R$string.class 530B
R$string.class 524B
R.class 524B
R.class 517B
R.class 517B
R.class 510B
R.class 510B
R.class 510B
R.class 510B
R.class 510B
R.class 510B
R.class 510B
R.class 503B
R.class 503B
R$string.class 498B
R$string.class 495B
R$string.class 489B
R$string.class 481B
R$string.class 481B
R$string.class 479B
R$string.class 455B
R$string.class 446B
R$string.class 445B
R$drawable.class 404B
R$drawable.class 401B
R$drawable.class 401B
R$drawable.class 398B
R$drawable.class 398B
R$drawable.class 398B
R$drawable.class 398B
R$drawable.class 398B
R$drawable.class 398B
R$drawable.class 398B
R$drawable.class 395B
R$drawable.class 395B
R$layout.class 391B
R$layout.class 388B
R$layout.class 388B
R$layout.class 385B
R$layout.class 385B
R$layout.class 385B
R$layout.class 385B
R$layout.class 385B
共 308 条
- 1
- 2
- 3
- 4
stevenhu_223
- 粉丝: 573
- 资源: 32
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功
- 1
- 2
- 3
- 4
- 5
- 6
前往页