android10设置led指示灯,Android修改LED指示灯

本文介绍如何在Android10上控制LED指示灯。通过修改`/sys/class/leds`目录下的亮度文件实现LED灯亮灭,代码示例中展示了红色、绿色和蓝色LED的控制。操作过程中遇到权限问题,解决办法是添加`android:sharedUserId="android.uid.system"`,但这将使应用成为系统级别,需在源码环境下编译。
AI助手已提取文章相关产品:

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的值指示灯的颜色就改变了,就不用我多说了,网上资料那叫一个一丢儿一丢儿的,还讲的很全面很到位。

记录记录,以免下次还在这种问题上浪费时间。

转:

您可能感兴趣的与本文相关内容

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值