DXライブラリ Android版を使用した Androidアプリで Java のコードでクリップボードを使用する |
すべての処理を C++ で実行できれば良いのですが、Android の基本言語が Java である関係で、 今のところ Java を使用しないとクリップボードの機能を使用することができません。 なので、ここでは『DXライブラリ Android版』には無いクリップボードの機能を Java を使用して 行うための手順を記します。 1.プロジェクトに Java のソースファイルを追加する 2.Java のコードを入力する 3.Java の情報を取得する C++ のコードを入力する 1.プロジェクトに Java のソースファイルを追加する まずに Java のソースファイルを以下の手順でプロジェクトに追加します。 ① 『ソリューションエクスプローラー』と書かれているリストに表示されている『(プロジェクト名).Packaging』 を右クリックして、表示されるプルダウンメニューから『追加(D)』→『新しいフォルダー(D)』を選択して、 『新しいフォルダー』を追加して、名前を『src』としてください。 ② 次に追加した『src』フォルダーを右クリックして、再びプルダウンメニューから『追加(D)』→『新しいフォルダー(D)』を選択して、 『新しいフォルダー』を追加して、今度は名前を『com』としてください。 ③ 次に追加した『com』フォルダーを右クリックして、再びプルダウンメニューから『追加(D)』→『新しいフォルダー(D)』を選択して、 『新しいフォルダー』を追加して、今度は名前を『(プロジェクト名)』( (プロジェクト名) はお手元のプロジェクトの名前に置き換えてください )としてください。 ④ 次に追加した『(プロジェクト名)』フォルダーを右クリックして、再びプルダウンメニューから『追加(D)』→『新しいフォルダー(D)』を選択して、 『新しいフォルダー』を追加して、今度は名前を『Packaging』としてください。 と、要は『(プロジェクト名).Packaging』以下に『src』→『com』→『(プロジェクト名)』→『Packaging』というフォルダ を作ります。次に漸く Java ファイルの追加です。 ⑤ 追加した『Packaging』フォルダーを右クリックして、今度は『新しい項目(W)...』を選択して『新しい項目の追加』ダイアログを表示します。 ⑥ ダイアログ左側のリストから『インストール済み』→『Cross Platform』→『Android』を選び、 右側のリストから『Java』を選びます。 ⑦ ダイアログ下側の『名前(N):』の項目に『(プロジェクト名).java』と入力して『追加(A)』ボタンを押します。 ⑧ 次に追加された『(プロジェクト名).java』を開いた状態でメニューから『ファイル(F)』→『名前を付けて(プロジェクト名).javaを保存(A)...』を 選択して、『名前を付けてファイルを保存』ダイアログを表示します。 ( VisualStudio 2015 の場合はメニューから『ファイル(F)』→『保存オプションの詳細設定(V)...』を選択して、『保存オプションの詳細設定』ダイアログを表示します ) ⑨ 『名前を付けてファイルを保存』ダイアログの右下にある『上書き保存(S)』の項目を『エンコード付きで保存(V)...』 に変更します。すると変更した瞬間に『名前を付けて保存の確認』ダイアログが表示されますので『はい(Y)』を選択してください。 ( VisualStudio 2015 の場合はこの工程が無いので、手順⑩に進んでください ) ⑩ 次に『保存オプションの詳細設定』ダイアログの『エンコード(E):』の項目を『日本語 (シフト JIS) - コードページ 932』から 『Unicode (UTF-8 シグネチャなし) - コードページ 65001』に変更して『OK』ボタンを押します。 ( 『Unicode (UTF-8 シグネチャ付き) - コードページ 65001』と間違えないようにしてください、 『Unicode (UTF-8 シグネチャなし) - コードページ 65001』はリストのかなり下の方にあります ) ( (プロジェクト名)となっている箇所は、お手元のプロジェクトの名前を入力してください ) これで java ファイルの追加は完了です。 2.Java のコードを入力する 追加した『(プロジェクト名).java』には最初から数行書かれていますが、それを全部消して、代わりに 今回の『クリップボードの処理』を行うための以下のコードを入力します。 ( (プロジェクト名)となっている箇所は、お手元のプロジェクトの名前を入力してください ) 3.Java の情報を取得する C++ のコードを入力する 次に Java で書いたクリップボードの機能を使用する C++ 側のプログラムです。 『DXライブラリ Android版』でのみ使用できる GetNativeActivity という関数を使用しています。 ( (プロジェクト名)となっている箇所は、お手元のプロジェクトの名前を入力してください ) 以上です。 これでプロジェクトを実行すると、画面に『クリップボードのテキスト[ テストテキスト ]』と表示されます。 詳細は割愛しますが、C++ から Java にアクセスする基本的な流れは。 ① AttachCurrentThreadAsDaemon でソフト実行用スレッドと JavaVM を関連付け、JNIEnv も取得。 ② GetObjectClass でアプリの Java クラスを取得。 ③ GetMethodID や GetFieldID で Java の関数や変数の ID を取得。 ④ Call???Method や Get???Field で Java の関数の呼び出しや変数の値を取得。 ⑤ DeleteLocalRef で Get???Field で取得したオブジェクト系の変数の参照を削除。 ⑥ DeleteLocalRef で GetObjectClass で取得したアプリの Java クラスの参照を削除。 ⑦ DetachCurrentThread でソフト実行用スレッドと JavaVM の関連付けを終了。 となります。 C++ と Java でのやり取りを行う機能( JNI( Java Native Interface ) ) の詳しい扱い方については、検索サイトで 『Android Java JNI』などのキーワードで検索して調べてみてください。 ただ、今回のサンプルでは JNI を使用した処理は ClipboardText_Set と ClipboardText_Get に纏められているので、 そのまま使う場合は JNI のことを意識しなくてもクリップボードの機能を使用することができます。 戻る |