TQ210搭载Android4.0.3系统构建之LED从驱动到HAL到JNI到应用程序(应用程序篇)
开发板:TQ210
OS:Android 4.0.3
以下所有内容都是在TQ210开发板上实现,并且很多内容也是天嵌公司提供,我将一些内容进行了删减、替换,然后加入了一些自己的理解,同时也是记录自己学习的旅程。
LedUnderActivity.java
package com.unders.led;
import com.unders.led.R;
import android.app.Activity;
import android.app.AlertDialog;
import android.os.Bundle;
import android.util.Log;
import android.view.Menu;
import android.view.MenuItem;
import android.widget.CompoundButton;
import android.widget.Switch;
import android.widget.CompoundButton.OnCheckedChangeListener;
import android.widget.Toast;
public class LedUnderActivity extends Activity implements OnCheckedChangeListener{
/** Called when the activity is first created. */
Switch led1,led2,all;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
led1=(Switch) findViewById(R.id.led1); //控制LED的开关
led2=(Switch) findViewById(R.id.led2);
all=(Switch) findViewById(R.id.led3); //控制两个LED的开关
led1.setOnCheckedChangeListener(this); //开关的事件监听
led2.setOnCheckedChangeListener(this);
all.setOnCheckedChangeListener(this);
if(!led_init()) //led初始化 加载库 初始化led 打开led
{
new AlertDialog.Builder(LedUnderActivity.this).setTitle("error").setMessage("init led fail\n").setPositiveButton("确定", null).show();
}
}
//加载libledunders.so
static{
System.loadLibrary("ledunders");
}
//本地函数
public static native boolean led_init();
public static native boolean led_close();
public static native boolean led_setOn(int number);
public static native boolean led_setOff(int number);
public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
// TODO Auto-generated method stub
switch (buttonView.getId()) {
case R.id.led1: //操纵LED1
//Toast.makeText(LedActivity.this, "1", 1).show();
//if (led1.isChecked()) {
controlLed(1,led1.isChecked());
Log.d("msg", "操作LED1,"+led1.isChecked());
//}
break;
case R.id.led2: //操纵LED2
//Toast.makeText(LedActivity.this, "2", 1).show();
controlLed(2,led2.isChecked());
Log.d("msg", "操作LED2,"+led2.isChecked());
break;
case R.id.led3: //同时操纵两个LED
//Toast.makeText(LedActivity.this, "12", 1).show();
controlLed(1,all.isChecked());
controlLed(2,all.isChecked());
Log.d("msg", "操作LED1和LED2,"+all.isChecked());
break;
}
}
private void controlLed(int number,boolean on) //控制LED函数
{
if (on) {
led_setOn(number);
}else {
led_setOff(number);
}
}
@Override
public boolean onCreateOptionsMenu(Menu menu) { //退出
// TODO Auto-generated method stub
menu.add(0, 1, 0, "退出");
return super.onCreateOptionsMenu(menu);
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
// TODO Auto-generated method stub
switch (item.getItemId()) {
case 1:
this.finish();
break;
default:
break;
}
return true;
}
}
main.xml
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:orientation="vertical" >
<LinearLayout
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:orientation="horizontal"
>
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/led1" />
<Switch
android:id="@+id/led1"
android:layout_width="0dp"
android:layout_weight="1"
android:layout_height="wrap_content"
/>
</LinearLayout>
<LinearLayout
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:orientation="horizontal"
>
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/led2" />
<Switch
android:id="@+id/led2"
android:layout_width="0dp"
android:layout_weight="1"
android:layout_height="wrap_content"
/>
</LinearLayout>
<LinearLayout
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:orientation="horizontal"
>
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/All" />
<Switch
android:id="@+id/led3"
android:layout_width="0dp"
android:layout_weight="1"
android:layout_height="wrap_content"
/>
</LinearLayout>
</LinearLayout>
效果图:
对于上层的应用开发 比较简单 通过JNI调用本地方法 操纵LED的亮或者灭
posted on 2013-06-24 17:30 liangxinzhi 阅读(126) 评论(0) 收藏 举报
浙公网安备 33010602011771号