android在c++jni代码中从另一个活动类调用java函数(代码片段)

author author     2022-12-29     738

关键词:

正如标题所示,如果函数来自不同的java活动类,如何从C++调用Java函数?

所有示例和教程都来回调用C++函数和java,但是调用者是类,JNIEnv和jobject是从java到JNI传递的。但是,如果需要调用的函数来自不同的java活动类呢?这该怎么做?通过活动的“这个”没有用

这是类的示例布局

活动类

public class MainActivity extends Activity 
      protected void onCreate(Bundle savedInstanceState) 
          super.onCreate(savedInstanceState);

          JNIAdapter.launch(); 
      

      private void DisplayLoginDialog() 
      
          //...
      

JNIAdapter.class

public class JNIAdapter 
    static 
       System.loadLibrary("jnisample-lib");
    

     public static native void launch();

jnisample.cpp

extern "C"
JNIEXPORT void JNICALL
Java_com_JNIAdapter_launch(JNIEnv *env,jobject object)

       jclass dataClass = env->FindClass("com/game/ramo/MainActivity");
       jmethodID javaMethodRef = env->GetMethodID(dataClass, "DisplayLoginDialog", "()V");
       env->CallVoidMethod(object, javaMethodRef);

在上面的代码中,使用jobject指的是JNIAdapter类而不是Activity,因此不调用DisplayLoginDialog()。这该怎么做?

答案

你的小例子(我明白你减少了与特定问题无关的所有细节,这非常好!)可以在没有本地方法的情况下运行。 JNIAdaptor.launch()可能是纯Java。所以,首先,用Java重写它并确保它有效。

问题可能是MainActivity.DisplayLoginDialog()可能期望其父活动处于前台或某些特定状态。这在纯Java中更容易修复。

之后,您编写的JNI代码应该没有问题。

在 Android JNI/NDK 代码中从 C++ 函数调用 C 函数

】在AndroidJNI/NDK代码中从C++函数调用C函数【英文标题】:CallingCFunctionsFromC++FunctionInAndroidJNI/NDKCode【发布时间】:2017-04-1015:48:55【问题描述】:我正在尝试从NDKTest.c文件中调用stringFromJNI2(env,obj)函数。这是NDKTest.c文件的代码:#inclu... 查看详情

在android中从另一个片段获取数据到片段(代码片段)

我有这个要求,我有一个主片段,其中有一个Tab有2片段,在那个屏幕“保存按钮”是固定的,在主片段。我想要做的是,当用户点击保存按钮时,我想通过从MainFragment运行的服务保存Tab1和Tab2的碎片数据。意味着我想要将TabFragme... 查看详情

如何在 Android 中从另一个应用程序启动 Activity

】如何在Android中从另一个应用程序启动Activity【英文标题】:HowtolaunchanActivityfromanotherApplicationinAndroid【发布时间】:2011-04-2118:52:09【问题描述】:我想从我的Android应用程序中启动已安装的软件包。我认为使用意图是可能的,但... 查看详情

java示例代码_在java中从另一个页面调用函数

java示例代码_在java中从另一个页面调用函数 查看详情

java示例代码_在onCreate方法中从另一个类调用方法

java示例代码_在onCreate方法中从另一个类调用方法 查看详情

如何在 C#2.0 中从另一个通用列表中减去一个通用列表

】如何在C#2.0中从另一个通用列表中减去一个通用列表【英文标题】:HowtosubtractonegenericlistfromanotherinC#2.0【发布时间】:2010-02-1514:52:35【问题描述】:首先,很可能是我以错误的方式处理我的问题,在这种情况下,我很乐意接受... 查看详情

在c ++中从另一个进程中解锁线程

】在c++中从另一个进程中解锁线程【英文标题】:Unlockathreadfromanotherprocess,inc++【发布时间】:2009-08-0508:56:41【问题描述】:我正在编写一个进程间通信模块(进程A和进程B)。B中的通信线程是否可以在进程A完成特定操作后立即... 查看详情

在 PCL 中从另一个点云中删除点?

】在PCL中从另一个点云中删除点?【英文标题】:RemovepointsinonepointcloudfromanotherinPCL?【发布时间】:2018-04-1005:49:25【问题描述】:假设我有两个点云A和B。我想做以下操作:C=A-B其中C是操作的输出云。我知道PCL具有用于连接两个... 查看详情

从另一个库调用一个库函数

...问题描述】:我有一个库说libraryOne.so(File1.c),它包含纯C代码。现在我想从我的Java文件中访问这段代码。为此,我将使用标准的JNI程序。但是为了使用JNI,我还应该修改File1.c中的C代码(比如包括JNI的头文件和一些标准的JNIEX 查看详情

java示例代码_在Android活动中从位图创建Blob

java示例代码_在Android活动中从位图创建Blob 查看详情

如何在 Android 工作室中从现有活动创建片段

】如何在Android工作室中从现有活动创建片段【英文标题】:HowtocreatefragmentsinAndroidstudiosfromexistingactivities【发布时间】:2016-05-0221:35:09【问题描述】:我在网上搜索过,但仍然无法找到有关如何从现有活动创建片段的任何帮助。... 查看详情

在 Access 中从另一个表的数据创建一个表

...想使用第一个表中的数据创建另一个表(希望通过一些VBA代码自动创建)。关于如何做到这一点有什么建议吗?我是VBA和Access的新手,所以任何详细的帮 查看详情

在 Swift 中从另一个 ViewController 访问变量

】在Swift中从另一个ViewController访问变量【英文标题】:AccessingvariablesfromanotherViewControllerinSwift【发布时间】:2014-06-0601:23:22【问题描述】:我有以下ViewController:classPageContentViewController:UIViewControllervarpageIndex:Int如何从另一个ViewCon... 查看详情

Android:从另一个活动中注销 Facebook

】Android:从另一个活动中注销Facebook【英文标题】:Android:LogoutofFacebookfromanotherActivity【发布时间】:2015-05-3101:33:38【问题描述】:我正在创建一个应用程序,用户可以在其中以不同的方式注册,其中一种是使用Facebook。Facebook登... 查看详情

Android Kotlin 无法从另一个活动中获取结果

】AndroidKotlin无法从另一个活动中获取结果【英文标题】:AndroidKotlinnotabletogetresultfromanotheractivity【发布时间】:2021-10-1103:41:57【问题描述】:我需要从我的主要活动开始一个活动,第二个活动必须进行REST调用(我正在使用OkHttp... 查看详情

在 Python 的同一类中从另一个方法调用一个方法

...了这个问题,但我无法得到正确的解决方案。因为在我的代码中,“if”正在调用类的方法“on_any_event”,作为回报应该调用我的另一个 查看详情

在googleapps脚本和javascript/jquery中从另一个对象或数组构建对象(代码片段)

我在使用GoogleApps脚本的电子表格插件中收到了以下对象:功能:functioncollectAllData()varsheet=SpreadsheetApp.openById(SHEET_ID).getSheetByName(DATA);varfileData=sheet.getDataRange().getValues();Logger.log(fileData);returnfile 查看详情

在SVG中从另一个圆中减去一个圆

】在SVG中从另一个圆中减去一个圆【英文标题】:SubtractonecirclefromanotherinSVG【发布时间】:2014-04-3001:04:59【问题描述】:我正在尝试找到一种方法,在SVG中从另一个形状中减去一个形状,在中间创建一个洞或从它的侧面咬出一个... 查看详情