人体感应(红外感应)

一、需求描叙

通过打开写的测试的app,点击测试的按钮,循环调用控制人体感应的方法来控制人体感应仪器(应该是红外感应)。


二、完成测试程序涉及到的文件:

1.一个xxx.so文件;

这个文件要导入到Android系统的开发机器中(我司是平板开发的,这个文件不了解,只知道要调用到平板上的红外感应时,一定要将此文件导入到系统的system/lib/目录下才行)。


2.一个zhc_human_infrared.java文件

这个文件将会被导入到创建的app的工程目录的src下,然后会报错,根据提示生成相应的包名;根据提示至不报错即可;控制红外的方法在这个文件里面(这是个.java文件下面会附上)。


扫描二维码关注公众号,回复: 11522800 查看本文章

三、测试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>


猜你喜欢

转载自blog.csdn.net/ningchao328/article/details/53022291