使用安卓SerialManagerService
来源:互联网 发布:淘宝整点抢购软件 编辑:程序博客网 时间:2024/05/17 06:08
原文地址:http://blog.csdn.net/orgst/article/details/49383765
安卓原始代码中的串口SerialPort SerialManger SerialService ISerialService.aidl 等都是@hide隐藏的,外部应用无法调用,定制需要,所以将该Manager启用。下面记录下过程
1.启用SerialService
其掉这三个文件中的@hide标识:
frameworks/base/core/Java/Android/hardware/SerialManager.java frameworks/base/core/java/android/hardware/SerialPort.java frameworks/base/core/java/android/hardware/ISerialManager.aidl
SerialService文件位置:
frameworks/base/services/java/com/android/server/SerialService.java该服务会在SystemSever.java中进行初始化,这里还需要将Context.java中的SERIAL_SERVICE的@hide去掉:
frameworks/base/core/java/android/content/Context.java- /*- * @hide- */ public static final String SERIAL_SERVICE = "serial";
还有, SerialService是通过读取R.array.config_serialPorts这个String array来加载的/dev/设备节点:
public SerialService(Context context) {
mContext = context;
mSerialPorts = context.getResources().getStringArray(
com.android.internal.R.array.config_serialPorts);
}
所以还需要添加下,文件位置:
frameworks/base/core/res/res/values/config.xml
在config_serialPorts中添加相应设备节点
<!-- List of paths to serial ports that are available to the serial manager. for example, /dev/ttyUSB0 --> <string-array translatable="false" name="config_serialPorts"> <item>"/dev/ttyS0"</item> </string-array>
在使用时应用需要添加uses-permission权限 android.permission.SERIAL_PORT ;
2.安卓提供了个测试工具,在framework/base/tests/SerialChat, 可以进入该目录, 输入mm 进行编译,输出在 out/target/product/xxx/data/app/中,可以push到手机里验证。
3.权限授权问题, 我在测试这个SerialChat程序时发现android.permission.SERIAL_PORT并未被授权, 通过pm.checkPermission(“android.permission.SERIAL_PORT”, pinfo.packageName) 检查可以看到。
查看frameworks/base/core/res/AndroidManifest.xml中发现,该permission定义如下:
<!-- Allows applications to access serial ports via the SerialManager. --> <permission android:name="android.permission.SERIAL_PORT" android:label="@string/permlab_serialPort" android:description="@string/permdesc_serialPort" android:protectionLevel="signature|system" />
可以看到protectionLevel是signature|systeml;
signature表示当申请此权限的应用程序的签名与声明此权限的应用的签名相同时才会授权, 该应用是framwork-res.apk,使用的签名是platform,所以需要应用也要使用platform签名。
system表示是系统应用;
所以这里修改Android.mk,添加LOCAL_CERTIFICATE := platform 再重新编译
LOCAL_PATH:= $(call my-dir)include $(CLEAR_VARS)LOCAL_MODULE_TAGS := testsLOCAL_CERTIFICATE := platformLOCAL_SRC_FILES := $(call all-subdir-java-files)LOCAL_PACKAGE_NAME := SerialChatinclude $(BUILD_PACKAGE)
- 使用安卓SerialManagerService
- 使用安卓SerialManagerService
- 使用安卓SerialManagerService
- android5.1使用SerialManagerService
- 安卓 setContentView使用
- 安卓CheckBox使用
- 安卓SeekBar使用
- 安卓使用mqtt
- 安卓---JNI使用
- 安卓使用闪光灯
- 安卓VideoView使用
- 安卓Activitylifecyclecallbacks使用
- 安卓WebView使用
- 安卓使用OkHttp
- 安卓HandlerThread使用
- 安卓SwipeRefreshLayout使用
- 安卓StatFs使用
- 安卓webwiew使用
- Sigmoid 函数和 Tanh 函数的区别
- Halcon学习(二) Halcon基本操作:批量读入本地文件夹内的图片
- iOS中导航控制器的使用 UINavigationController
- 云计算基础(二):Hadoop单机、伪分布、集群配置
- CSS3编号示例
- 使用安卓SerialManagerService
- 算法训练 特殊的数字四十
- 设计模式
- 写给即将求职或欲从事互联网行业的同学们
- this在方法赋值过程中无法保持(隐式丢失)
- 信息的表示和处理
- python3 实现延迟计算
- NumPy学习笔记(1)--NumPy库简介
- 使用Oracle SQL Developer连接数据库中遇到的一系列错误