Have an amazing solution built in RAD Studio? Let us know. Looking for discounts? Visit our Special Offers page!
C++Delphi

Android APIをFireMonkey Androidプロジェクトで利用可能なDelphiおよびC++Builderユニットに変換する

概要

クロスプラットフォームアプリケーション開発フレームワークについては、必要なものを作成するためのすべてのツールを入手し、そのフレームワークを形成し、フレームワーク自体を使用または拡張することにより、自分用の新しい開発ツールを作成できます。 たとえば、FireMonkeyフレームワークを見てみましょう。 サードパーティのAPIが利用できない場合は、それらをDelphiまたはC++Builderユニットに変換できます。 FireMonkeyは、拡張するために不可欠なヘルパーユニットを提供します。
変換プロセスを自動化するには、WINSOFTによるAndroidツール向けのJavaImportを利用できます。 このツールは商用ですが、使用可能なDelphiおよびC++Builderユニットに.jarファイルまたは.classファイルを変換できるトライアルバージョンがあります。 しかし、機能制限があります。Android APIをDelphiまたはC++Builder向けに変換する場合は、ライセンスを取得する必要があります。

動作仕様

  • サポートOS: Android 32 および Android 64
  • DelphiおよびC++Builderのバージョン 6 – 10.4で利用可能

使用方法について

1つのコマンドで.classファイルを.pasファイルに変換する方法を解説した、このツールに関するビデオをご覧になることをお勧めします。 また、実際のアプリケーションで生成されたファイルの内容も示します。

変換されたandroid.widget.Toast APIで使用方法を確認しましょう。 例として、android.widget.Toast.pasユニットがあります。 はじめに、モジュールを usesに追加する必要があります。

jtoastclass-delphi-c-builder-firemonkey-android-development-8418655

ご覧のとおり、すべてがObject Pascalコードに変換されています。

実装はこちらです:

procedure ShowToast(const Message: string); overload;
begin
{$if CompilerVersion < 32}
  CallInUiThread(
    procedure
    begin
{$endif}
      TJToast.JavaClass.makeText(SharedActivityContext, StrToJCharSequence(Message), TJToast_LENGTH_SHORT).show;
{$if CompilerVersion < 32}
    end);
{$endif}
end;

コードに注意すると、コンパイラーのバージョンが32未満、つまり、Sydney(10.4)、Rio(10.3)、Tokyo(10.2)ではない場合、CallInUiThreadプロシージャを使用してコードを実行するコンパイラー・レベルによる条件分岐があります。以前のバージョンでは起動アクティビティと結果の処理に不可欠な手順でしたが、新しいバージョンでは廃止されています。 新しいバージョンでは、すべてのコードが現在Java UIスレッドで実行されているため、スレッドを同期する必要はありません。

それから、ユニットをブリッジするJavaClassでTJToastを呼び出します。 また、変換時の型の種類にも常に注意を払う必要があります。

次に、ShowToastを利用して、FireMonkey Androidプロジェクトからバッテリーレベルを取得する方法を学びます。

procedure TFormMain.ButtonBatteryClick(Sender: TObject);
var
  Filter: JIntentFilter;
  Battery: JIntent;
  Level, Scale: Integer;
begin
  Filter := TJIntentFilter.JavaClass.init(TJIntent.JavaClass.ACTION_BATTERY_CHANGED);
  Battery := MainActivity.registerReceiver(nil, filter);
  Level := Battery.getIntExtra(TJBatteryManager.JavaClass.EXTRA_LEVEL, -1);
  Scale := battery.getIntExtra(TJBatteryManager.JavaClass.EXTRA_SCALE, -1);
  ShowToast('Battery level: ' + FloatToStr(100 * Level / Scale), TJGravity_CENTER_HORIZONTAL or TJGravity_CENTER_VERTICAL);
end;
  • 最初に、TJIntentFilterインターフェイスでブリッジします。
  • JFMXNativeActivityを使用してレシーバーを登録します。
  • 次に、EXTRA_LEVELおよびEXTRA_SCALEプロパティを取得します。
  • ShowToastを使用して、バッテリーレベルを表示します。

上記のデモビデオでご覧ください。

ぜひ、WINSOFT JavaImportツールのフル機能をご確認ください。

RAD Studio 10.4 ボーナスパックキャンペーン実施中!
Enterprise Component Packには、WinSoftのCSVライブラリをはじめとする、100を超えるさまざまなWinSoftコンポーネントが搭載されています。2020年9月25日までに、Delphi / C++Builder / RAD Studio 10.4 Sydney EnterpriseまたはArchitectを購入すれば、すべて購入すると140万円以上の価値があるEnterprise Component Packを追加費用なしで入手できます。今すぐRAD Studio 10.4にステップアップしましょう!

Kai 1.1 Now Available! Kai 1.1 Now Available! What's Coming in RAD Studio 13.2 Florence

Reduce development time and get to market faster with RAD Studio, Delphi, or C++Builder.
Design. Code. Compile. Deploy.

Start Free Trial   Upgrade Today

   Free Delphi Community Edition   Free C++Builder Community Edition

Leave a Reply

This site uses Akismet to reduce spam. Learn how your comment data is processed.

IN THE ARTICLES