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

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

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

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

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

package realarm.hardware;

public class HardwareControl {

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

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

详细的project例如以下图:

watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvd2FuZ19zaHVhaV93dw==/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center" alt="">

主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);
}
}
});
}
}

是不是发现更简洁了,也easy理解,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>

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

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

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

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

    欢迎转载,务必注明出处.http://blog.csdn.net/wang_shuai_ww/article/details/44456755 本篇是继<s5p4418 Android 4.4. ...

  2. Python数据分析Numpy库方法简介(二)

    数据分析图片保存:vg 1.保存图片:plt.savefig(path) 2.图片格式:jpg,png,svg(建议使用,不失真) 3.数据存储格式: excle,csv csv介绍 csv就是用逗号 ...

  3. 我的Python学习笔记(四):动态添加属性和方法

    一.动态语言与静态语言 1.1 动态语言 在运行时代码可以根据某些条件改变自身结构 可以在运行时引进新的函数.对象.甚至代码,可以删除已有的函数等其他结构上的变化 常见的动态语言:Object-C.C ...

  4. Android 动态注册JNI函数

    1.JNI函数注册方式 在Android开发中,由于种种原因我们需要调用C/C++代码,在这个时候我们就需要使用jni了, jni在使用时要对定义的函数进行注册,这样java才能通过native关键字 ...

  5. android开发源代码分析--多个activity调用多个jni库的方法

    android开发源代码分析--多个activity调用多个jni库的方法 有时候,我们在开发android项目时会遇到须要调用多个native c/jni库文件,下面是本人以前实现过的方法,假设有知 ...

  6. 【转载】cocos2dx 中 Android NDK 加载动态库的问题

     原文地址:http://blog.csdn.net/sozell/article/details/10551309 cocos2dx 中 Android NDK 加载动态库的问题 闲聊 最近在接入各 ...

  7. Android动态调试so库JNI_Onload函数-----基于IDA实现

    之前看过吾爱破解论坛一个关于Android'逆向动态调试的经验总结帖,那个帖子写的很好,对Android的脱壳和破解很有帮助,之前我们老师在上课的时候也讲过集中调试的方法,但是现在不太实用.对吾爱破解 ...

  8. 三、Android NDK编程预备之Java jni入门创建C/C++共享库

    转自: http://www.eoeandroid.com/thread-264971-1-1.html 应网友回复,答应在两天前要出一篇创建C/C++共享库的,但由于清明节假期,跟朋友出去游玩,丢手 ...

  9. 【转】Android下编译jni库的二种方法(含示例)

    原文网址:http://blog.sina.com.cn/s/blog_3e3fcadd01011384.html 总结如下:两种方法是:1)使用Android源码中的Make系统2)使用NDK(从N ...

随机推荐

  1. vue-loader 细节

    vue-loader 能根据 .vue 文件,导入一个vue组件.我这里从 vue-cli 的构建项目中抽取了vue-loader 一个小例子出来:vuedemo/demo02 vue-loader ...

  2. Mac 配置 php-fpm

    Mac 自带 php-fpm,在终端执行 php-fpm,会报如下错误: ERROR: failed to open configuration file '/private/etc/php-fpm. ...

  3. Android API Guides 安卓API指导----第一部分:Introduction(介绍)

    第一部分: Introduction(介绍) 目录包含:APP  Fundamentals     (应用程序基础) Device   Compatibility(设备兼容性) System Perm ...

  4. Java中线程的使用

    多线程的创建及启动 一.继承Thread类创建线程子类 1.在这子类中重写run方法,在run方法内写线程任务代码 2.创建该子类实例,即是创建了一个线程实例 3.调用该实例的start方法来启动该线 ...

  5. 了解DOM

    DOM是为了方便处理层次型文档(如XML.HTML)的一种技术.DOM还提供了一套API,使开发人员可以用面向对象的方式来处理这些文档.对于XML文档来说,有专门的处理XML文档是XML  DOM,一 ...

  6. 大数据学习——VMware安装

    ---恢复内容开始--- 一.下载VMware,安装 二.新建虚拟机 1.FIle-->new virtual machine 后面进入硬件资源分配,其中cpu给1个,内存至少给1G,网卡的选择 ...

  7. 『NYIST』第九届河南省ACM竞赛队伍选拔赛[正式赛二]-最小内积(第八届北京师范大学程序设计竞赛决赛)

    H. 最小内积                                                                   Time Limit: 1000ms Memory ...

  8. FZU2102Solve equation

    Problem 2102 Solve equation Accept: 881    Submit: 2065 Time Limit: 1000 mSec    Memory Limit : 3276 ...

  9. GO 语言周报【七月第 1 期】

    TIOBE 七月排名 Go 进入前十 TIOBE 七月头条:Go 语言达到历史最高并进入前十.对于 Go 语言来说,这是一个里程碑时刻,我们可以更大胆地想象,它下一步的发展会达到怎样的高度.Go 是否 ...

  10. [BZOJ4207]Can

    [BZOJ4207]Can 试题描述 这个问题是源于一个在棋盘上玩的,由Sid Sackson设计的名叫Can't stop的游戏的.这个问题与Can't stop有一定的相似之处,但是不需要玩过Ca ...