jni 调android 跳转Activity

public class MyActivity extends AppCompatActivity {
    static {
        System.loadLibrary("mylib");
    }
 
    public native void startActivityFromJNI();
 
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_my);
 
        // 调用JNI方法
        startActivityFromJNI();
    }
}
#include <jni.h>
#include <android/log.h>
 
#define LOG_TAG "MyActivity"
#define LOGI(...)  __android_log_print(ANDROID_LOG_INFO, LOG_TAG, __VA_ARGS__)
#define LOGE(...)  __android_log_print(ANDROID_LOG_ERROR, LOG_TAG, __VA_ARGS__)
 
JNIEXPORT void JNICALL
Java_com_example_myapp_MyActivity_startActivityFromJNI(JNIEnv *env, jobject obj) {
    jclass activityClass = (*env)->FindClass(env, "android/app/Activity");
    jmethodID startActivityMethod = (*env)->GetMethodID(env, activityClass, "startActivity",
                                                       "(Landroid/content/Intent;)V");
    jclass intentClass = (*env)->FindClass(env, "android/content/Intent");
    jmethodID intentConstructor = (*env)->GetMethodID(env, intentClass, "<init>", "(Landroid/content/Context;Ljava/lang/Class;)V");
    jclass classClass = (*env)->FindClass(env, "java/lang/Class");
    jmethodID forName = (*env)->GetStaticMethodID(env, classClass, "forName", "(Ljava/lang/String;)Ljava/lang/Class;");
    jmethodID getApplicationContext = (*env)->GetMethodID(env, activityClass, "getApplicationContext", "()Landroid/content/Context;");
 
    // 获取Activity的Context
    jobject context = (*env)->CallObjectMethod(env, obj, getApplicationContext);
 
    // 获取目标Activity的Class对象
    jstring className = (*env)->NewStringUTF(env, "com.example.myapp.OtherActivity");
    jclass clazz = (*env)->CallStaticObjectMethod(env, classClass, forName, className);
 
    // 创建Intent对象
    jobject intent = (*env)->NewObject(env, intentClass, intentConstructor, context, clazz);
 
    // 启动Activity
    (*env)->CallVoidMethod(env, obj, startActivityMethod, intent);
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值