四,应用层(APP)
1,为了方便,使用Eclipse编写一个简单的控制灯的应用,添加四个button,分配控制灯1亮,灯1灭,灯2亮,灯2灭,Activity代码如下
- <?xml version="1.0" encoding="utf-8"?>
- <manifest xmlns:android=""
- package="com.android.swtled"
- android:versionCode="1"
- android:versionName="1.0">
- <application android:icon="@drawable/icon" android:label="@string/app_name">
- <activity android:name=".swtled"
- android:label="@string/app_name">
- <intent-filter>
- <action android:name="android.intent.action.MAIN" />
- <category android:name="android.intent.category.LAUNCHER" />
- </intent-filter>
- </activity>
- </application>
- </manifest>
3,字符串文件res/values/strings.xml
- <?xml version="1.0" encoding="utf-8"?>
- <resources>
- <string name="hello">Hello World, swtled!>
- <string name="app_name">swtled</string>
- <string name="seton_light1"></string>
- <string name="setoff_light1"></string>
- <string name="seton_light2"></string>
- <string name="setoff_light2"></string>
- </resources>
4,布局文件脚本main.xml
- <?xml version="1.0" encoding="utf-8"?>
- <LinearLayout xmlns:android=""
- android:orientation="vertical"
- android:layout_width="fill_parent"
- android:layout_height="fill_parent"
- >
- <TextView
- android:layout_width="fill_parent"
- android:layout_height="wrap_content"
- android:text="@string/hello"
- />
- <LinearLayout
- android:layout_width="fill_parent"
- android:layout_height="wrap_content"
- android:orientation="horizontal"
- android:gravity="center">
-
- <Button
- android:id="@+id/button_seton_light1"
- android:layout_width = "wrap_content"
- android:layout_height = "wrap_content"
- android:text = "@string/seton_light1"
- />
-
- <Button
- android:id = "@+id/button_setoff_light1"
- android:layout_width = "wrap_content"
- android:layout_height = "wrap_content"
- android:text = "@string/setoff_light1"
- />
-
- <Button
- android:id="@+id/button_seton_light2"
- android:layout_width = "wrap_content"
- android:layout_height = "wrap_content"
- android:text = "@string/seton_light2"
- />
-
- <Button
- android:id = "@+id/button_setoff_light2"
- android:layout_width = "wrap_content"
- android:layout_height = "wrap_content"
- android:text = "@string/setoff_light2"
- />
- </LinearLayout>
- </LinearLayout>
5,由于是编译器是Eclipse,但实际编译却是要在android源代码环境下编译,于是,将工程目录的三个文件
src,res以及AndroidManifest.xml复制到gingerbread源码目录的package/experimental/swtled下,其中
swtled文件是需要自己新建的,复制完成之后,进入编译阶段
6,编译app并生成apk文件
(1) mmm package/experimental/swtled
编译成功后,便可以在out/target/product/generic/system/app目录下看到swtled.apk文件
(2) 重新打包系统镜像文件system.img
make snod
7,开机测试
8,注意事项:
在工程中需要import两个包是
import android.os.ISwtledService;
import android.os.ServiceManager;
程序通过ServiceManager.getService("swtled")来获得SwtledService,
接着通过ISwtledService.Stub.asInterface函数转换为ISwtledService接口。
其中,服务名字“swtled”是系统启动时加载SwtledService时指定的,
而ISwtledService接口定义在android.os.ISwtledService中
需要注意的是,虽然用Eclipse编译这个应用,但是无法用Eclipse编译,最后还是需要将工程中res,src以及AndroidManifest.xml三个文件copy到gingerbread/package/experimental/swtled,swtled是自己再新建的文件夹, 然后使用 mmm package/experimental/swtled编译,如果正确,最后会生成.apk文件。
9,结束
以上四篇文章记录了在android平台下使用硬件led灯实现从java应用层控制灯的四个实现阶段,这个主要是记录自己的一些心得,在开发阶段也借鉴参考了一些网友的文章,在此表示感谢。
阅读(4396) | 评论(0) | 转发(0) |