一、需求描叙
通过打开写的测试的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;@Overrideprotected 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 {// 睡眠 100mstry {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" ><TextViewandroid:id="@+id/tv"android:layout_width="wrap_content"android:layout_height="wrap_content"android:layout_centerHorizontal="true"android:text="测试项" /><TextViewandroid: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="人体感应测试" /><ToggleButtonandroid: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" /><TextViewandroid: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="人体感应测试返回值:" /><TextViewandroid: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>