一、需求描叙
通过打开写的测试的app,点击测试的按钮,循环调用控制人体感应的方法来控制人体感应仪器(应该是红外感应)。
二、完成测试程序涉及到的文件:
1.一个xxx.so文件;
这个文件要导入到Android系统的开发机器中(我司是平板开发的,这个文件不了解,只知道要调用到平板上的红外感应时,一定要将此文件导入到系统的system/lib/目录下才行)。
2.一个zhc_human_infrared.java文件
这个文件将会被导入到创建的app的工程目录的src下,然后会报错,根据提示生成相应的包名;根据提示至不报错即可;控制红外的方法在这个文件里面(这是个.java文件下面会附上)。
三、测试app的相关代码
1.MainActivity.java
package com.zhc.demotext;
import com.zhc.android.sensor.zhc_human_infrared_interface;
import android.os.Bundle;
import android.view.View;
import android.widget.TextView;
import android.widget.ToggleButton;
import android.app.Activity;
public class MainActivity extends Activity {
private zhc_human_infrared_interface infrared;
protected Thread mThread1;
private ToggleButton mBtn;
private TextView retuenedValue;
boolean mDone = false;
boolean start_sensor_test = true;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
mBtn = (ToggleButton) findViewById(R.id.send);
retuenedValue = (TextView) findViewById(R.id.returned_value_tv);
infrared = new zhc_human_infrared_interface();
// 创建线程
mThread1 = new Thread() {
public void run() {
while (true) {
if (start_sensor_test) {
//这儿是耗时操作,完成之后更新UI;
runOnUiThread(new Runnable(){
@Override
public void run() {
//更新UI
//infrared.zhc_human_infrared_get();
retuenedValue.setText(infrared.zhc_human_infrared_get()+"");
}
});
// 睡眠 1 秒
try {
sleep(1* 1000);
} catch (InterruptedException e) {
e.printStackTrace();
}
} else {
// 睡眠 100ms
try {
sleep(1 * 100);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
}
};
mThread1.start();
// 2.发送按钮的监听
mBtn.setOnClickListener(new View.OnClickListener() {
public void onClick(View v) {
if (v.getId() == R.id.send) {
if (!mDone) {
mDone = true;
start_sensor_test = true;
} else {
mDone = false;
start_sensor_test = false;
mThread1 = null;
}
}
}
});
}
}
2.zhc_human_infrared.java
package com.zhc.android.sensor;
import android.util.Log;
public class zhc_human_infrared_interface {
static String TAG = "zhc_human_infrared_interface";
/* 初始化 JNI 库 */
private native int zhc_human_infrared_init();
/* 加载库文件 */
static
{
System.loadLibrary("zhc_human_infrared");
}
/* 对象创建时初始化 */
public zhc_human_infrared_interface()
{
zhc_human_infrared_init();
}
/*
* 函数: zhc_human_infrared_event
* 作用: 事件回调
* 参数: status: 0:未检测到红外晃动 1:检测到红外晃动
*/
public void zhc_human_infrared_event(int status)
{
Log.d(TAG, " status = " + status);
}
/*
* 函数: zhc_human_infrared_start
* 作用: 启动监听
* 返回: 0:成功 -1:打开设备失败 -2:读取失败 -3:创建监听线程失败
* 说明: zhc_human_infrared_event 将会被回调
*/
public native int zhc_human_infrared_start();
/*
* 函数: zhc_human_infrared_stop
* 作用: 停止监听
* 返回: 只会返回 0
* 说明: zhc_human_infrared_event 将不会被回调
*/
public native int zhc_human_infrared_stop();
/*
* 函数: zhc_human_infrared_get
* 作用: 直接获取状态值
* 返回: 0:未检测到红外晃动 1:检测到红外晃动
* -1:打开设备失败 -2:读取失败
* 说明: 与回调无关
*/
public native int zhc_human_infrared_get();
}
3.activity_main.xml
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:paddingBottom="@dimen/activity_vertical_margin"
android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin"
tools:context=".MainActivity" >
<TextView
android:id="@+id/tv"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_centerHorizontal="true"
android:text="测试项" />
<TextView
android:id="@+id/logo_tv"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentLeft="true"
android:layout_below="@id/tv"
android:text="人体感应测试" />
<ToggleButton
android:id="@+id/send"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:layout_below="@id/logo_tv"
android:textOff="@string/btn_start"
android:textOn="@string/btn_stop" />
<TextView
android:id="@+id/humen_sensor_tv"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentLeft="true"
android:layout_below="@id/send"
android:text="人体感应测试返回值:" />
<TextView
android:id="@+id/returned_value_tv"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentLeft="true"
android:layout_below="@id/humen_sensor_tv"
android:text="__" />
</RelativeLayout>
4.strings.xml
<?xml version="1.0" encoding="utf-8"?>
<resources>
<string name="app_name">DemoText</string>
<string name="btn_start">测试</string>
<string name="btn_stop">Stop</string>
<string name="action_settings">Settings</string>
<string name="hello_world">Hello world!</string>
</resources>