首页 > 解决方案 > C++ Builder 中的 Android JNI

问题描述

我正在寻找在 C++ Builder 上使用 Android JNI,我看到了这段代码:

   private void doPhotoPrint() {
       PrintHelper photoPrinter = new PrintHelper(getActivity());
       photoPrinter.setScaleMode(PrintHelper.SCALE_MODE_FIT);
       Bitmap bitmap = BitmapFactory.decodeResource(getResources(),
               R.drawable.droids);
       photoPrinter.printBitmap("droids.jpg - test print", bitmap);
   }

这是用于打印(在热敏打印机中)位图的 Java 代码,我需要在 C++ Builder 中使用它,但我不知道如何转换它。intents我看到了JNI 甚至 JNI做的其他事情。我不想要建议或其他东西,也不需要完成的代码(这样说是为了避免判断我的问题是针对建议的),但我想要类似这段代码的东西来帮助创建一个函数。

PS:我没有找到任何关于 Android JNI 的文档。

标签: firemonkeyc++builderrad-studio

解决方案


它看起来像这样:

_di_JPrintHelper photoPrinter = TJPrintHelper::JavaClass->init(TAndroidHelper::Activity);
photoPrinter->setScaleMode(TJPrintHelper::JavaClass->SCALE_MODE_FIT);
_di_JBitmap bitmap = TJBitmapFactory::JavaClass->decodeResource(TAndroidHelper::Context->getResources(), /*R.drawable.droids*/...);
photoPrinter->printBitmap(StringToJString("droids.jpg - test print"), bitmap);

我不知道 Embarcadero 是否已经导入了TJPrintHelperTJBitmapFactory类(对 Embarcadero 的Androidapi...头文件做一个 grep)。如果没有,您可以简单地使用Java2OP手动导入它们。

我不知道如何翻译R.drawable.droids成 Embarcadero 的 JNI 框架。decodeResource()想要droids图像的整数资源 ID。你将不得不自己追踪那个。


推荐阅读