C层调用Toast弹出--JNI编程实战

原创 2018年04月16日 19:59:52

C层调用Toast弹出–JNI编程实战

在Android开发中,我们知道使用Java语音可以写出Toast弹出字符串效果。那么使用C语音能否实现同样的功能呢?
在一些Android的开发中,为了提高安全性等原因,有些代码我们不得不使用C/C++语言使用JNI实现其功能,面对Java中的特性,我们如何调用?本文主要介绍如何在C层反射调用Java层的函数,实现Toast弹出。

一. Java层封装
首先为了能从C层反射调用Java层方法,需要在Java层封装好Toast方法,代码如下,注意包名、类名和方法名,其名字可以任意,但是在C层反射调用的时候需要根据自己写的包名、类名和方法名进行修改。(我这里是写在application中,当然也可以写在自己想要的activity中,但是需要注意C层调用时该类有没有进行加载)

package com.test;
import android.content.Context;
import android.app.Application;
import android.content.Context;
import android.os.Build;
import android.util.Log;
import android.widget.Toast;
public class FirstApplication extends Application{
    protected void attachBaseContext(Context arg1) {
        super.attachBaseContext(arg1);
    }
    //这个方法是封装好的用于C层反射调用的方法
    public void showToast(String msg){
        Toast.makeText(this,msg,Toast.LENGTH_SHORT).show();
    }
}

二. C层反射调用
Java层写好就需要我们C层反射调用了,至于JNI怎么写,不用多说,网上都有,这里只贴一下C层的函数代码。

 void ToastFromJni(JNIEnv *env, jobject object){
    jstring toast_msg = (jstring)(*env)->NewStringUTF(env,"This mesage is from C");
    jclass myclass = (*env)->FindClass(env,"com/test/FirstApplication");
    jmethodID mid = (*env)->GetMethodID(env,myclass,"showToast","(Ljava/lang/String;)V"); 
    (*env)->CallVoidMethod(env,object,mid,toast_msg);  
}

OK,几行代码很轻松搞定Toast调用。

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/wmh_100200/article/details/79965523

商务参考体系结构:企业对消费者 (B2C电子商务实践) 第 5 章:实现概述

 商务参考体系结构:企业对消费者 第 5 章:实现概述 Microsoft Corporation 2001年5月 摘要:“Microsoft 商务参考体系结构:企业对消费者”提供了可重复使用和可定制...
  • coolstar
  • coolstar
  • 2001-08-17 10:54:00
  • 1595

Android JNI实现简单的c层调用Java层函数(C层调用Java层Toast进行提示)

  • hty1053240123
  • hty1053240123
  • 2018-02-07 23:43:02
  • 1655

c/c++ native 层 通过 JNI API 调用 java 层 的AudioTrack 来播放 音频文件

#include #include #include #include #define LOG_TAG "test" #define LOGI(f,v)  __android_l...
  • liuxiIT
  • liuxiIT
  • 2012-08-03 16:09:42
  • 4586

androidjni编程,java和c层的互相通信传递数据

  • 2016年05月09日 10:15
  • 14.96MB
  • 下载

Android NDK开发(五)——C代码回调Java代码

在上篇博客里了解了Java层是怎样传递数据到C层代码,并且熟悉了大部分的实际开发知识,基本上掌握这些就可以做一个基本的NDK开发了,但是光是了解Java回调C层的数据是不是还不够啊,考虑问题要考虑可逆...
  • lee_tianya
  • lee_tianya
  • 2015-01-05 09:27:00
  • 5975

Jni C/C++运行时遇到异常怎么办?捕获与抛出

有个头疼的问题,Jni C/C++遇到问题闪退怎么办?有办法,我们可以在异常发生后通过判断清除异常解决,保持程序及时反应处理。 比如: package crash; import java.se...
  • zhangbuzhangbu
  • zhangbuzhangbu
  • 2016-10-26 23:09:22
  • 2490

JNI中利用java调用底层C++代码

JNI学习之java调用底层C/C++代码输出简单HelloWorld
  • NTSDB
  • NTSDB
  • 2016-12-07 11:52:25
  • 1223

jni调试 c层在eclipse中输出信息

  • 2012年06月26日 21:46
  • 135KB
  • 下载

android Java与JNI层互相调用

Java层调用JNI中的函数首先在TextJNI.java层创建一个类TextJNI,类中使用一些native方法package com.example.androidjni; import andr...
  • luckywang1103
  • luckywang1103
  • 2015-08-28 14:25:21
  • 2096

TestJni例子

  • 2015年12月03日 17:19
  • 2.36MB
  • 下载
收藏助手
不良信息举报
您举报文章:C层调用Toast弹出--JNI编程实战
举报原因:
原因补充:

(最多只允许输入30个字)