Android应用层修改LED指示灯
2014-04-23 17:31
405 查看
今天真是不值大发了,在Java应用层修改LED指示灯的颜色,这个死问题花了我几个小时的时间,这是多么痛的领悟
直接上代码吧
public class LED extends Activity implements View.OnClickListener {
private static final String TAG = "LED";
TextView mLedTest;
int mLedStatus = 0;
private final int mLedColorRed = 0xFFFF0000;
private final int mLedColorGreen = 0xFF00FF00;
private final int mLedColorBlue = 0xFF0000FF;
final byte[] LIGHT_ON = { '2', '5', '5' };
final byte[] LIGHT_OFF = { '0' };
private final int RED = 0;
private final int GREEN = 1;
private final int BLUE = 2;
private int color = RED;
String RED_LED_DEV = "/sys/class/leds/red/brightness";
String GREEN_LED_DEV = "/sys/class/leds/green/brightness";
String BLUE_LED_DEV = "/sys/class/leds/blue/brightness";
public void onCreate(Bundle paramBundle) {
super.onCreate(paramBundle);
setContentView(R.layout.led_test);
mLedTest = ((TextView)findViewById(R.id.ledcolor));
mLedTest.setOnClickListener(this);
setledlightcolor(color);
mLedTest.setTextColor(mLedColorRed);
mLedTest.setText("RED");
mLedStatus = 1;
}
public void onClick(View v) {
Log.d("SamsungFactoryTestActivity", "DimmingTest---onClick---mLedStatus=" + mLedStatus);
switch (v.getId()) {
case R.id.ledcolor:
if(mLedStatus == 0) {
setledlightcolor(RED);
mLedTest.setTextColor(mLedColorRed);
mLedTest.setText("RED");
}else if(mLedStatus == 1) {
setledlightcolor(GREEN);
mLedTest.setTextColor(mLedColorGreen);
mLedTest.setText("GREEN");
}else if(mLedStatus == 2) {
setledlightcolor(BLUE);
mLedTest.setTextColor(mLedColorBlue);
mLedTest.setText("BLUE");
}else if(mLedStatus == 3) {
setledlightcolor(-1);
mLedTest.setTextColor(0xFF000000);
mLedTest.setText("END");
}else {
finish();
}
mLedStatus ++;
break;
}
}
@Override
public void finish() {
setledlightcolor(-1);
super.finish();
}
private void setledlightcolor(int color) {
logd("set:" + color);
boolean red = false, green = false, blue = false;
switch (color) {
case RED:
red = true;
break;
case GREEN:
green = true;
break;
case BLUE:
blue = true;
break;
default:
break;
}
try {
FileOutputStream fRed = new FileOutputStream(RED_LED_DEV);
fRed.write(red ? LIGHT_ON : LIGHT_OFF);
fRed.close();
FileOutputStream fGreen = new FileOutputStream(GREEN_LED_DEV);
fGreen.write(green ? LIGHT_ON : LIGHT_OFF);
fGreen.close();
FileOutputStream fBlue = new FileOutputStream(BLUE_LED_DEV);
fBlue.write(blue ? LIGHT_ON : LIGHT_OFF);
fBlue.close();
} catch (Exception e) {
loge(e);
}
}
void logd(Object d) {
Log.d(TAG, "" + d);
}
void loge(Object e) {
Log.e(TAG, "" + e);
}
}
布局文件很简单,就是一个textview,用来显示不同的文字和单击的时候改变背景的颜色(看上去就像是屏幕的颜色改变了一样),就不贴出来了。其实这个很简单,在系统目录sys/class/leds/目录下有好多文件夹,里面有red、green、blue等,手机连接电脑通过shell命令也可以进去查看,这三个文件夹进去里面都有一个叫brightness的文件,存储的是LED灯亮度的值,值是0-255。然后就是根据不同的需求不同的操作去修改这个值就好了,亮就写入255(也可以是其它大于0的值),不亮就写个0进去,具体代码也很简单:
FileOutputStream fRed = new FileOutputStream(RED_LED_DEV);
fRed.write(255); // 亮
fRed.close();
代码就是这么简单了,但是总是报没有权限的错(程序可以运行,但是指示灯不亮,因为值没有写进去。。),各种读写文件的权限加上也没用,各种郁闷,各种资料也查不到,后来觉得这个可能需要的系统级权限很高,就把android:sharedUserId="android.uid.system"这个权限加上去了,结果就可以了!麻蛋!
当然加了android:sharedUserId="android.uid.system"权限后就代表是系统级别的应用,在eclipse上编译不过的,必须在源码环境下编译。至于为什么改了brightness的值指示灯的颜色就改变了,就不用我多说了,网上资料那叫一个一丢儿一丢儿的,还讲的很全面很到位。
记录记录,以免下次还在这种问题上浪费时间。
话说我写博客都不知道怎么把代码换成漂亮的格式,别人的博客代码这么漂亮,搞的我都不好意思写博客了。。。哪个好心人看到了请把方法给我留下吧。。。多谢
直接上代码吧
public class LED extends Activity implements View.OnClickListener {
private static final String TAG = "LED";
TextView mLedTest;
int mLedStatus = 0;
private final int mLedColorRed = 0xFFFF0000;
private final int mLedColorGreen = 0xFF00FF00;
private final int mLedColorBlue = 0xFF0000FF;
final byte[] LIGHT_ON = { '2', '5', '5' };
final byte[] LIGHT_OFF = { '0' };
private final int RED = 0;
private final int GREEN = 1;
private final int BLUE = 2;
private int color = RED;
String RED_LED_DEV = "/sys/class/leds/red/brightness";
String GREEN_LED_DEV = "/sys/class/leds/green/brightness";
String BLUE_LED_DEV = "/sys/class/leds/blue/brightness";
public void onCreate(Bundle paramBundle) {
super.onCreate(paramBundle);
setContentView(R.layout.led_test);
mLedTest = ((TextView)findViewById(R.id.ledcolor));
mLedTest.setOnClickListener(this);
setledlightcolor(color);
mLedTest.setTextColor(mLedColorRed);
mLedTest.setText("RED");
mLedStatus = 1;
}
public void onClick(View v) {
Log.d("SamsungFactoryTestActivity", "DimmingTest---onClick---mLedStatus=" + mLedStatus);
switch (v.getId()) {
case R.id.ledcolor:
if(mLedStatus == 0) {
setledlightcolor(RED);
mLedTest.setTextColor(mLedColorRed);
mLedTest.setText("RED");
}else if(mLedStatus == 1) {
setledlightcolor(GREEN);
mLedTest.setTextColor(mLedColorGreen);
mLedTest.setText("GREEN");
}else if(mLedStatus == 2) {
setledlightcolor(BLUE);
mLedTest.setTextColor(mLedColorBlue);
mLedTest.setText("BLUE");
}else if(mLedStatus == 3) {
setledlightcolor(-1);
mLedTest.setTextColor(0xFF000000);
mLedTest.setText("END");
}else {
finish();
}
mLedStatus ++;
break;
}
}
@Override
public void finish() {
setledlightcolor(-1);
super.finish();
}
private void setledlightcolor(int color) {
logd("set:" + color);
boolean red = false, green = false, blue = false;
switch (color) {
case RED:
red = true;
break;
case GREEN:
green = true;
break;
case BLUE:
blue = true;
break;
default:
break;
}
try {
FileOutputStream fRed = new FileOutputStream(RED_LED_DEV);
fRed.write(red ? LIGHT_ON : LIGHT_OFF);
fRed.close();
FileOutputStream fGreen = new FileOutputStream(GREEN_LED_DEV);
fGreen.write(green ? LIGHT_ON : LIGHT_OFF);
fGreen.close();
FileOutputStream fBlue = new FileOutputStream(BLUE_LED_DEV);
fBlue.write(blue ? LIGHT_ON : LIGHT_OFF);
fBlue.close();
} catch (Exception e) {
loge(e);
}
}
void logd(Object d) {
Log.d(TAG, "" + d);
}
void loge(Object e) {
Log.e(TAG, "" + e);
}
}
布局文件很简单,就是一个textview,用来显示不同的文字和单击的时候改变背景的颜色(看上去就像是屏幕的颜色改变了一样),就不贴出来了。其实这个很简单,在系统目录sys/class/leds/目录下有好多文件夹,里面有red、green、blue等,手机连接电脑通过shell命令也可以进去查看,这三个文件夹进去里面都有一个叫brightness的文件,存储的是LED灯亮度的值,值是0-255。然后就是根据不同的需求不同的操作去修改这个值就好了,亮就写入255(也可以是其它大于0的值),不亮就写个0进去,具体代码也很简单:
FileOutputStream fRed = new FileOutputStream(RED_LED_DEV);
fRed.write(255); // 亮
fRed.close();
代码就是这么简单了,但是总是报没有权限的错(程序可以运行,但是指示灯不亮,因为值没有写进去。。),各种读写文件的权限加上也没用,各种郁闷,各种资料也查不到,后来觉得这个可能需要的系统级权限很高,就把android:sharedUserId="android.uid.system"这个权限加上去了,结果就可以了!麻蛋!
当然加了android:sharedUserId="android.uid.system"权限后就代表是系统级别的应用,在eclipse上编译不过的,必须在源码环境下编译。至于为什么改了brightness的值指示灯的颜色就改变了,就不用我多说了,网上资料那叫一个一丢儿一丢儿的,还讲的很全面很到位。
记录记录,以免下次还在这种问题上浪费时间。
话说我写博客都不知道怎么把代码换成漂亮的格式,别人的博客代码这么漂亮,搞的我都不好意思写博客了。。。哪个好心人看到了请把方法给我留下吧。。。多谢
相关文章推荐
- Android应用层修改LED指示灯
- Android应用层制作LED指示灯
- Android修改LED指示灯
- 详解Android应用层制作LED指示灯
- android LED 指示灯闪光效果
- android充电指示灯颜色修改
- Android应用层操作底层gpio来控制led
- android 部分手机修改led灯方法
- 修改底层文件,实现修改Android设备屏幕亮度和控制led灯
- 修改Android镜像文件 ramdisk.img、system.img、userdata.img获取root权限
- Android 相机开发 三星拍照崩溃修改解决 详细
- 论初次修改 Android framework 代码
- android 命令创建签名文件keystore、修改已有keystore的别名密码、重新签名APK
- 再战android-语音识别2(修改配置)
- Android2.2、2.3定制修改状态栏布局、背景、去除状态栏按键、添加状态栏按键
- Android——修改开机画面
- dm37xx android2.3.4增加recovery升级功能(一) —— 代码修改
- Android TextInputLayout修改提示信息文字颜色
- Android中SQLite数据库表结构的修改
- android用java动态增添删除修改布局