Android 4.4.2 动态添加JNI库方法记录 (二 app应用层)

欢迎转载,务必注明出处:http://blog.csdn.net/wang_shuai_ww/article/details/44458553

源码下载地址:http://download.csdn.net/detail/u010406724/8515377

本篇介绍怎么使用前面建立好的库文件。

要使用JNI库文件,那么首先我们是需要把它加载到系统中,并对其定义接口,供给应用来调用。

建立一个工程,我的工程名为RealArmTest,过程就省略了,完成后再在src下建立一个类,不继承其他类,包名为realarm.hardware,新建的类名为HardwareControl。代码如下:

package realarm.hardware;

public class HardwareControl {

	public native int LedSetState(int ledNum,int ledState);

	static {
		System.loadLibrary("LedJni");
	}

}

具体的工程如下图:

主activity文件源码如下:

package com.example.realarmtest;

import android.app.Activity;
import android.os.Bundle;
import android.view.View;
import android.widget.ImageView;
import android.widget.ToggleButton;
import realarm.hardware.HardwareControl;;

public class MainActivity extends Activity {
	private HardwareControl MyLedTest = null;
	private ToggleButton btnLed;
	private ImageView imageLed;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        btnLed = (ToggleButton) findViewById(R.id.btnLed);
        imageLed = (ImageView) findViewById(R.id.imageLed);

        MyLedTest = new HardwareControl();
        MyLedTest.LedSetState(0, 0);
        imageLed.setImageResource(R.drawable.bulboff);

        btnLed.setOnClickListener(new View.OnClickListener() {

			@Override
			public void onClick(View v) {
				if(btnLed.isChecked()){
					imageLed.setImageResource(R.drawable.bulbon);
					MyLedTest.LedSetState(0, 1);
				}
				else {
					imageLed.setImageResource(R.drawable.bulboff);
					MyLedTest.LedSetState(0, 0);
				}
			}
		});
    }
}

是不是发现更简洁了,也容易理解,O(∩_∩)O。

布局文件为:

<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="com.example.ledtest.MainActivity" >

    <ToggleButton
        android:id="@+id/btnLed"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignLeft="@+id/imageLed"
        android:layout_alignRight="@+id/imageLed"
        android:layout_centerVertical="true"
        android:textOff="开灯"
        android:textOn="关灯" />

    <ImageView
        android:id="@+id/imageLed"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_above="@+id/btnLed"
        android:layout_centerHorizontal="true"
        android:layout_marginBottom="22dp"
        android:src="@drawable/bulboff" />

</RelativeLayout>

另外还需要资源图片,这里就没法贴出来了,需要的去上面提供的地址下载完整工程源码就有了。

最后愿看这些系列文章的朋友都能对Android驱动到上层应用有一定的了解。

时间: 2024-08-29 17:20:17

Android 4.4.2 动态添加JNI库方法记录 (二 app应用层)的相关文章

Android 4.4.2 动态添加JNI库方法记录 (一 JNI库层)

欢迎转载,但必须注明出处.http://blog.csdn.net/wang_shuai_ww/article/details/44456755 本篇是继<s5p4418 Android 4.4.2 驱动层 HAL层 服务层 应用层 开发流程记录>之后的另外一种添加JNI和服务的方法. 前面的方法是直接把HAL和服务层添加到了,Android的api中,这样的方式好处是操作系统已开发完成,剩下做APP的开发,那么我们只需要一个classes.jar文件即可使用我们自己Android系统的被隐藏

Android 4.4.2 动态加入JNI库方法记录 (一 JNI库层)

欢迎转载,务必注明出处.http://blog.csdn.net/wang_shuai_ww/article/details/44456755 本篇是继<s5p4418 Android 4.4.2 驱动层 HAL层 服务层 应用层 开发流程记录>之后的第二种加入JNI和服务的方法. 前面的方法是直接把HAL和服务层加入到了.Android的api中.这种方式优点是操作系统已开发完毕,剩下做APP的开发,那么我们仅仅须要一个classes.jar文件就可以使用我们自己Android系统的被隐藏的

Android 4.4.2 动态加入JNI库方法记录 (二 app应用层)

欢迎转载,务必注明出处:http://blog.csdn.net/wang_shuai_ww/article/details/44458553 源代码下载地址:http://download.csdn.net/detail/u010406724/8515377 本篇介绍怎么使用前面建立好的库文件. 要使用JNI库文件,那么首先我们是须要把它载入到系统中.并对其定义接口,供给应用来调用. 建立一个project,我的project名为RealArmTest.过程就省略了,完毕后再在src下建立一个

android 在布局中动态添加控件

第一步 Java代码 final LayoutInflater inflater = LayoutInflater.from(this); 第二步:获取需要被添加控件的布局 Java代码 final LinearLayout lin = (LinearLayout) findViewById(R.id.LinearLayout01); 第三步:获取需要添加的布局(控件) Java代码 LinearLayout layout = (LinearLayout) inflater.inflate( R

Android在布局中动态添加view的两种方法

一.说明 添加视图文件的时候有两种方式:1.通过在xml文件定义layout:2.java代码编写 二.前言说明 1.构造xml文件 2.LayoutInflater 提到addview,首先要了解一下LayoutInflater类.这个类最主要的功能就是实现将xml表述的layout转化为View的功能.为了便于理解,我们可以将它与findViewById()作一比较,二者都是实例化某一对象,不同的是findViewById()是找xml布局文件下的具体widget控件实例化,而LayoutI

python3 - 动态添加属性以及方法

给实例动态添加方法,需引入types模块,用其的MethodType(要绑定的方法名,实例对象)来进行绑定:给类绑定属性和方法,可以通过 实例名.方法名(属性名) = 方法名(属性值) 来进行绑定.给类添加方法,通过@classmethod:给类添加静态方法通过@staticmethod import types #定义了一个类class Person(object): num = 0 def __init__(self, name = None, age = None): self.name

JS内置对象的原型不能重定义?只能动态添加属性或方法?

昨天马上就快下班了,坐在我对面的同事突然问我一个问题,我说“爱过”,哈哈,开个玩笑.情况是这样的,他发现JS的内置对象的原型好像不能通过字面量对象的形式进行覆盖, 只能动态的为内置对象的原型添加属性或方法,下面那个具体的例子说明: var arr=[]; Array.prototype={ push:function(){ alert("1"); } }; arr.push(); //没有任何输出 有人可能会说了“你先定义的arr,后来又修改了Array.prototype,这时Arr

python类对象动态添加属性和方法

class Person(): #创建一个类 def __init__(self,name): #定义初始化信息. self.name = name li = Person('李') #实例化Person('李'),给变量li li.age = 20 #再程序没有停止下,将实例属性age传入.动态语言的特点. Person.age = None #这里使用类名来创建一个属性age给类,默认值是None.Python支持的动态属性添加. def eat(self): #定义一个方法,不过这个方法再

easyui------向datagrid中动态添加不重复的记录

前一段时间,在界面中遇到从datagrid已有数据中选择数据到另一个datagrid,这时,是需要考虑到添加不重复的记录的. 如下图所示的效果: 在第一次添加的时候,其实是要将所有选中的学生进行添加,那么如果第二次进行添加,就要进行过滤操作,这时只需要添加那些之前,没有选中的学生,所以这里又一次用到了原来学习到的产生不重复的随机数里面的知识了,又回忆了一遍,印象深刻了许多. 具体实现如下: cshtml:这里第一个表格中的数据,通过级联查询,会将所有学生直接显示在表格中,第二个表格用来显示所有已