第一章:JNI的简单使用(3)-APP软件实现

根据上一节的设计,我们的APP界面已经完成,但是botton和checkbox没有任何的功能,
只是一个简单的装饰部件。接下来我们实现APP的软件操作,为部件关联具体的功能。

button

在AndrodStudio(下面简称AS)软件界面,使用Android\color{red}{Android}模式查看工程,可以看到app 与 Gradle Scripts。
展开如下
第一章:JNI的简单使用(3)-APP软件实现
在app-> res-> layout -> content_mian.xml(只做参考,不同工程略有差异)文件中,

  .....
    <Button
        android:id="@+id/BUTTON"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:text="ALL OFF"/>
  .....

xml的语言比较好理解,这里描述了一个button,他的id为"@+id/BUTTON",后续部分我们会使用到该id,该button显示的宽度为满屏,高度为自动调节,并且其中的初始显示文本为"ALL OFF"。这样的一段代码描述之后,就简单的实现了一个button部件。虽然这个button虽然可以点击,但是没有任何的功能,基本的打印都不能实现,下面我们为这个button添加功能。

打开app-> java-> com.example.administrator,我们可以看到文件MainActivity.java文件,其中有一个
protected\color{red}{protected} void\color{red}{void} onCreate\color{red}{ onCreate}
这个方法会在在APP启动的时候就会被调用,在这个方法内部加入代码如下:

button (Button)findViewById(R.id.BUTTON)

创建一个button对象,并且指定其id为BUTTON,与xml文件中 android:id="@+id/BUTTON"对应,这样就与界面的button绑定在一起了,我们在MainActivity.java文件中对button的操作也是对界面button的操作。

别忘记我们的目的是通过APP点亮LED灯,其中button是总开关,当客户点击button时,我们肯定需要调用一个函数关闭或者打开LED,当然这个函数肯定时应用层的,没有办法真正的去点亮LED,对硬件的操作,后续章节进行讲解。

创建出一个botton对象之后,绑定其点击执行函数,添加代码如下

button.setOnClickListener(new MyButtonListener());

这样,当我们点击button的时候,就会执行函数 MyButtonListener(),这个函数做什么呢?当然不是点亮就是熄灭,我们先做一个简单的框架,仅仅设置一下初始化显示的文字,后续章节在慢慢填充,代码如下:

    class MyButtonListener implements View.OnClickListener {
        @Override
        public void onClick(View view) {
            button.setText("ALL OFF");}

这样,最初始的button就出来了,后续点击button去完成点灯,灭灯,只需在该函数内部继续添加相应代码即可。

checkbox

经过前面的设计,对于checkbox的实现就相对简单了,依葫芦画瓢即可,同样还是在app-> res-> layout -> content_mian.xml文件中,
有如下代码

    <CheckBox
        android:id="@+id/LED1"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:text="LED1"
        android:onClick="onCheckboxClicked"/>

    <CheckBox
        android:id="@+id/LED2"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:text="LED2"
        android:onClick="onCheckboxClicked"/>

和前面类似的在此就不进行讲解了,此处不同的地方在于android:onClick=&quot;onCheckboxClicked&quot;\color{red}{android:onClick=&quot;onCheckboxClicked&quot;}(该代码为问我们自行填写),根据英语我们可以很容易的理解到,点击Checkbox时,会执行函数onCheckboxClicked。故此,我们需要在MainActivity.java文件中,实现该函数,同样我们还是只做简单的框架搭建,后续再实现对硬件的操作,代码如下

    public void onCheckboxClicked(View view) {
        boolean checked = ((CheckBox) view).isChecked();
        switch(view.getId()) {
            case R.id.LED1:
                if (checked) {
                    Toast.makeText(getApplicationContext(), "LED1 on", Toast.LENGTH_SHORT).show();
                }
                else {
                    Toast.makeText(getApplicationContext(), "LED1 off", Toast.LENGTH_SHORT).show();
                }
                break;
            case R.id.LED2:
                if (checked) {
                    Toast.makeText(getApplicationContext(), "LED2 on", Toast.LENGTH_SHORT).show();
                }
                else {
                    Toast.makeText(getApplicationContext(), "LED2 off", Toast.LENGTH_SHORT).show();
                }
                break;
        }
    }

首先,我们可以看到调用了booleanchecked=((CheckBox)view).isChecked();\color{red}{ boolean checked = ((CheckBox) view).isChecked();}
理由很简单,两个Checkbox共用一个函数,当然需要确定是那个Checkbox被点击。
Toast.makeText\color{red}{Toast.makeText}起一个提示框的作用,当我们点击Checkbox,浮现出当前LED的状态

回顾

该小节简单的介绍了一下,AS界面部件怎么和具体功能联系在一起,下小节正式步入JNI
第一次写博客,不足之处,请多多包含。