Android中读取/dev/input/event1并在TextView显示二进制内容求助
解决Android 4.4读取/dev/input/event1并显示二进制内容的问题
我来帮你搞定这个问题!你遇到的特殊字符乱码,本质是直接把二进制字节当成普通字符串解析了——毕竟/dev/input/event1是二进制设备文件,直接转字符串肯定会出现不可见字符。要显示成0和1的二进制格式,核心是把读取到的每个字节转换成对应的8位二进制字符串,再拼接起来展示。下面是具体的实现步骤和代码示例:
核心处理逻辑
- 以字节流方式读取设备文件,避免按字符串直接读取
- 将单个字节转换为8位二进制字符串(不足8位补前导0,保证格式统一)
- 在UI线程安全更新TextView(避免主线程阻塞导致ANR)
- 重要提示:读取
/dev/input这类系统设备节点,Android 4.4通常需要Root权限,或者你的应用是系统签名应用,后续记得补充权限相关逻辑
代码示例
1. 用AsyncTask异步读取并转换
public class InputEventReaderTask extends AsyncTask<Void, String, Void> { private TextView mOutputTextView; private final File mInputEventFile = new File("/dev/input/event1"); public InputEventReaderTask(TextView textView) { mOutputTextView = textView; } @Override protected Void doInBackground(Void... voids) { if (!mInputEventFile.exists()) { publishProgress("错误:目标文件不存在"); return null; } try (FileInputStream fis = new FileInputStream(mInputEventFile)) { byte[] buffer = new byte[256]; // 按需调整缓冲区大小 int bytesRead; while ((bytesRead = fis.read(buffer)) != -1) { StringBuilder binaryContent = new StringBuilder(); for (int i = 0; i < bytesRead; i++) { // 把有符号byte转成无符号值,再转8位二进制,补前导0 String byteBinary = String.format("%8s", Integer.toBinaryString(buffer[i] & 0xFF)).replace(' ', '0'); binaryContent.append(byteBinary).append(" "); // 加空格分隔每个字节 } publishProgress(binaryContent.toString()); } } catch (IOException e) { publishProgress("读取失败:" + e.getMessage()); e.printStackTrace(); } return null; } @Override protected void onProgressUpdate(String... values) { super.onProgressUpdate(values); // 在UI线程追加显示内容 mOutputTextView.append(values[0]); } }
2. 在Activity中启动任务
// 假设你的TextView控件id是tv_binary_output TextView outputTv = findViewById(R.id.tv_binary_output); new InputEventReaderTask(outputTv).execute();
关键细节解释
buffer[i] & 0xFF:Java的byte是有符号类型,直接转int会补符号位导致二进制字符串异常,用& 0xFF可以把它转为无符号的字节值,保证二进制转换正确String.format("%8s", ...).replace(' ', '0'):确保每个字节都显示为完整的8位二进制,避免出现短位的情况- 异步读取:直接在主线程读取文件会触发ANR,所以必须用AsyncTask、协程或者HandlerThread来做后台处理
这样调整后,TextView就能正常显示0和1组成的二进制内容,不会再出现奇怪的特殊字符了!
内容的提问来源于stack exchange,提问作者JoeG
相关产品推荐
相关产品推荐

