Tag: jni

Android如何处理多个实例数据/身份和JNI

这是一个良好实践和智能解决方案的问题,我需要一个建议。 我有一个应用程序(据我在Stackoverflow和Google搜索中可以阅读): 该应用程序处理文档类型,我喜欢同时处理多个文档 。 (我习惯于Win32,其中有一个程序段和每个实例的一段数据,但在Android / Java中显然不是这样。) 我看到一个实例从应用程序存储(平板电脑)启动应用程序,另一个打开带有附加文档文件的Gmail或电子邮件,第三个实例是通过从文件处理应用程序(如ES文件浏览器)打开文件。 我喜欢他们都可以在两者之间翻转。 用户可能希望一次读取多个文档。 (如果我在Android / Java环境中使用错误的单词实例,请更正我) 该应用程序内置于JNI部分,其中包含所有数据和逻辑以及Java Android用户界面。 (JNI部分设​​计为独立于OS,用于不同操作系统中的实现,具有粘合c文件。) 每次翻转屏幕或翻转实例时,Android部分都会重新创建 只有一个JNI实例,即使重新创建Android Java部件并且所有Java数据都被清除,它仍然保留,现在它显示最后一个读取文件,在所有情况下翻转推送正在运行的app按钮 在JNI部分中创建不同的实例没有问题,只要它们可以将它们绑定到每个Java实例 ,具有身份或我可以用作与JNI部分交换的参数的东西, 但是如何 ? 我无法在每个实例中保存FilePathName以识别Java部分中的实例,因为在重新创建Java部分时将擦除它。 第一个问题是,如果我在阅读Stackoverflow和Googled文章的观察中是对的吗? 第二个问题,解决问题的任何好建议? 我需要一个建议 只要它还活着,是否有可能在所有情况下识别实例? 任何其他可能的路径,既包括为每个实例分隔数据的一般问题,也包括识别JNI处理每个实例的数据的实例?

如何用Valist从C调用java vararg方法

我有varargs的C方法 void message(int id, …) 它应该用vararg调用Java静态方法 public static void message(String messageName, String … args) 我怎么能用C valist和JNI API来做呢? 谢谢!

使用Eclipse开发JNI应用程序(组合Java / C ++)

有没有人成功设法为Eclipse设置组合的Java / C ++项目? 我想做的很简单; 1) Compile my Java sources 2) Run Javah to create the JNI interface 3) Compile all the C/C++ sources 4) Link native shared library + package the JAR 提示甚至是真正有效的项目都非常受欢迎。 (Eclipse 3.5)

从OS获取事件

我在Windows上工作,但我被困在Mac上。 我有Canon SDK,并在它上面构建了一个JNA包装器。 它适用于Windows,需要一些Mac帮助。 在sdk中,有一个函数可以注册回调函数。 基本上当相机发生事件时,它会调用回调函数。 在Windows上,注册后,我需要使用User32来获取事件并通过以下方式调度事件: private static final User32 lib = User32.INSTANCE; boolean hasMessage = lib.PeekMessage( msg, null, 0, 0, 1 ); // peek and remove if( hasMessage ){ lib.TranslateMessage( msg ); lib.DispatchMessage( msg ); //message gets dispatched and hence the callback function is called } 在api中,我在Mac中找不到类似的类。 我怎么去这个? PS:unix的JNA api非常广泛,我无法弄清楚要寻找什么。 参考可能会有所帮助

如何在Android开发中将jchar转换为JNi中的char?

我想在JNI中将jchar数组转换为char数组? 我该怎么做: JNI代码片段: jcharArray arr = (jcharArray) (*env)->CallObjectMethod(env, obj, mid); int count = (*env)->GetArrayLength(env, arr); jchar* chars = (*env)->GetCharArrayElements(env, arr, 0); char reg_chal= chars[1]; char reg_chal = chars [1]语句将垃圾值插入reg_chal。 如何解决此问题。 提前致谢。

JNI错误:访问过时的弱全局引用

我在本机代码中缓存对Java对象的引用,如下所示: // java global reference deleter // _JAVA_ENV is an instance of JNIEnv that is cached globally and just // valid in current thread scope static void g_java_ref_deleter(jobject ptr) { _JAVA_ENV->DeleteGlobalRef(ptr); } // native class caches a java object reference class NativeA { private: shared_ptr M_java_object; public: setJavaObject(jobject obj) { M_java_object = shared_ptr(_JAVA_ENV->NewGlobalRef(obj), g_java_ref_deleter); } […]

尝试为PDFTron Android加载图书馆时出错

尝试与PDFTron集成时,我遇到了一个奇怪的错误,即PDFNet Android SDK: UnsatisfiedLinkError:无法加载PDFNetC:findLibrary返回null。 预计armv7a,找到cpu_info:abi:armeabi-v7a 我已经检查了这个链接 。 很可能PDFNet Android SDK提供的本机库未正确包含在我的项目中。 在lib文件夹里面我下载了包,有本机库和java库都需要包含在我的项目中。 在主文件夹中创建一个名为jniLibs的文件夹,并将所有.so(具有相应的文件夹结构)放在jniLibs文件夹中,即: 这将允许Android Studio自动识别本机库路径。 我还指定了产品风味来过滤哪些.so使用,例如: productFlavors { armv7a { ndk { abiFilters “armeabi-v7a” } } arm { ndk { abiFilters “armeabi” } } x86 { ndk { abiFilters “x86” } } armv8 { ndk { abiFilters “arm64-v8a” } } x86_64 { ndk { abiFilters “x86_64” […]

如何使用swig定义和传递ByteBuffer?

我需要从Java调用C函数。 该函数具有以下API: void convert(char* pchInput, int inputSize, int convertValue, char* pchOutput, int* outputSize); 我正在使用swig来制作包装器。 我读了post: ByteBuffer.allocate()与ByteBuffer.allocateDirect() 最好将结果(pchOutput)创建为DirectByteBuffer 。 如何将Bytebuffer传递给代码c(使用swig) c代码如何从ByteBuffer读取和写入数据? 谢谢

如何在Java中使用SWIG Generated C结构作为通过SWIG / JNI输入C函数

我有一个SWIG接口文件,它将一些C函数(通过JNI)公开给我的Java应用程序,这些C结构用作C函数的输入(通过SWIG / JNI)。 SWIG将结构生成为Java类,但我不确定如何设置结构属性,因为setter采用SWIG生成的类型。 我需要在将结构属性作为输入传递到我的Java类的C函数之前设置它们。 example_location_id_t_是我需要传递的类,但Id和Phy_idx的setter采用以下SWIG类型。 如何填充SWIGTYPE_p_unsigned_char和SWIGTYPE_p_uint32_t以便我可以设置SWIGTYPE_p_uint32_t类的Id和Phy_idx属性? setId(SWIGTYPE_p_unsigned_char value)和setPhy_idx(SWIGTYPE_p_uint32_t value) package com.test.jni; public class SWIGTYPE_p_unsigned_char { private long swigCPtr; protected SWIGTYPE_p_unsigned_char(long cPtr, boolean futureUse) { swigCPtr = cPtr; } protected SWIGTYPE_p_unsigned_char() { swigCPtr = 0; } protected static long getCPtr(SWIGTYPE_p_unsigned_char obj) { return (obj == null) ? 0 : obj.swigCPtr; } } package com.test.jni; public […]

如何通知用户桌面应用程序的重要事件?

我们的客户使用我们的软件(Java Swing应用程序开始使用Webstart)以及其他软件(如MS Office)来完成他的工作。 他不时会在我们的软件中处理重要事件而不会有太多延迟。 客户希望获得明显的通知。 现在他可能正在使用Excel,因此弹出一个消息框是不够的(尽管任务栏中的条目会闪烁)。 我们需要一些机制,如Outlook通知程序,即一个始终可见但不会窃取焦点的弹出窗口。 通知程序应始终显示,直到消息原因消失(用户已解决问题)或用户已关闭消息(如Outlook中)。 此外,我们想要显示一个托盘图标,并可能播放声音。 我已经尝试了Java6 java.awt.SystemTray以及JDIC(版本0.9,因为我们已经在该项目的类路径中具有该lib)等效,但我没有找到一种方法来设置TrayIcon.displayMessage的超时方法,并且消息似乎不总是在顶部。 除了JNI还有其他选择来实现所请求的行为吗? 如果JNI是唯一的选择,并且由于Windows是我们客户的唯一平台,Outlook通知程序是仅Outlookfunction,还是可以通过Windows API自由使用? 或者存在什么其他选项来通知用户在一个软件中执行的重要任务,而不妨碍他在另一个软件中完成他当前的任务。 因此,系统modal dialog是不可取的!