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

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调用。

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值