【问题标题】:Android JNI in C++ BuilderC++ Builder 中的 Android JNI
【发布时间】:2020-11-26 17:31:38
【问题描述】:

我正在寻找在 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 正在做其他事情。我不想要建议或其他东西,也不需要完成的代码(这样说是为了避免判断我的问题是针对建议的),但我想要类似这样的代码来帮助创建函数。

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

【问题讨论】:

    标签: firemonkey c++builder rad-studio


    【解决方案1】:

    看起来像这样:

    _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。你必须自己去追踪那个。

    【讨论】:

    • 我在 Embarcadero 的 Androidapi 头文件中看到了 TJPrintHelper 不存在。当您说“使用 Java2OP 手动导入它们”时,我在哪里可以得到 TJPrintHelper 来做呢?
    • @Que44 我自己从未使用过Java2OP,但它应该很简单,只需告诉它导入androidx.print.PrintHelper 类,它就会为您生成TJPrintHelper 类。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-10-22
    • 2016-04-17
    • 2011-05-20
    • 2023-04-10
    相关资源
    最近更新 更多