package com.example.(プロジェクト名);
import android.app.NativeActivity;
import android.os.Bundle;
import android.widget.EditText;
import android.app.AlertDialog;
import android.content.DialogInterface;
import android.view.View;
import java.lang.Runnable;
public class MainActivity extends NativeActivity
{
NativeActivity AppActivity ;
EditText EditView ;
AlertDialog.Builder AlBuilder ;
// 入力された文字列を保存するメンバー変数
String InputString ;
// 文字列の入力が終わったら 1 にするフラグ用変数
int InputEnd ;
// 文字列入力ダイアログを開始する
public void StartInputStringDialog()
{
// NativeActivity の参照をメンバー変数に保存しておく
AppActivity = this ;
// 文字列の入力が終わったら 1 にするフラグを 0 で初期化
InputEnd = 0 ;
// UIスレッドで実行する処理を登録する
runOnUiThread( new Runnable ()
{
// UIスレッドで呼ばれる関数
@Override public void run()
{
// 文字列入力の View を作成
EditView = new EditText( AppActivity ) ;
// ダイアログを作成
AlBuilder = new AlertDialog.Builder( AppActivity ) ;
// ダイアログのタイトルを設定
AlBuilder.setTitle( "テキスト入力ダイアログ" ) ;
// ダイアログに文字列の View をセット
AlBuilder.setView( EditView ) ;
// ダイアログに OK ボタンを追加
AlBuilder.setPositiveButton( "OK", new DialogInterface.OnClickListener()
{
// OK ボタンが押されたときに呼ばれる関数
public void onClick( DialogInterface dialog, int whichButton )
{
// 入力された文字列をメンバー変数に保存
InputString = EditView.getText().toString() ;
// 入力されたかどうかのフラグを立てる
InputEnd = 1 ;
// タイトルバーとナビゲーションバーを非表示にする処理
View decor = AppActivity.getWindow().getDecorView() ;
decor.setSystemUiVisibility(
View.SYSTEM_UI_FLAG_HIDE_NAVIGATION |
View.SYSTEM_UI_FLAG_LOW_PROFILE |
View.SYSTEM_UI_FLAG_FULLSCREEN |
View.SYSTEM_UI_FLAG_IMMERSIVE |
View.SYSTEM_UI_FLAG_IMMERSIVE_STICKY );
}
});
// ダイアログを表示
AlBuilder.show() ;
}
}) ;
}
}
#include "DxLib.h"
#include <string.h>
int android_main( void )
{
JNIEnv *env ;
const ANativeActivity *NativeActivity ;
int InputEnd ;
char InputString[ 1024 ] ;
// 背景を灰色にする
SetBackgroundColor( 128,128,128 ) ;
// DXライブラリの初期化
if( DxLib_Init() < 0 ) return -1 ;
// 描画先を裏画面に変更
SetDrawScreen( DX_SCREEN_BACK ) ;
// アプリの NativeActivity を取得しておく
NativeActivity = GetNativeActivity() ;
// Java の関数 StartInputStringDialog の呼び出し
{
// JavaVM とソフト実行用スレッドを関連付け( C++ から Java の機能を使用するために必要 )
if( NativeActivity->vm->AttachCurrentThreadAsDaemon( &env, NULL ) != JNI_OK )
{
return -1 ;
}
// Java のクラス MainActivity を取得
jclass jclass_MainActivity = env->GetObjectClass( NativeActivity->clazz ) ;
// Java のクラス MainActivity のメンバー関数 StartInputStringDialog の ID を取得
jmethodID jmethodID_StartInputDialog = env->GetMethodID( jclass_MainActivity, "StartInputStringDialog", "()V" ) ;
// Java のクラス MainActivity のメンバー関数 StartInputStringDialog の呼び出し
env->CallVoidMethod( NativeActivity->clazz, jmethodID_StartInputDialog ) ;
// Java のクラス MainActivity の参照を削除
env->DeleteLocalRef( jclass_MainActivity ) ;
// JavaVM とソフト実行用スレッドの関連付け終了
NativeActivity->vm->DetachCurrentThread() ;
}
// 入力が完了したかどうかのフラグを倒す
InputEnd = 0 ;
// メインループ
while( ProcessMessage() == 0 )
{
// 裏画面の内容をクリア
ClearDrawScreen() ;
// 入力が完了していなかったら Java のクラス MainActivity のメンバー変数 InputEnd と InputString の情報を取得する
if( InputEnd == 0 )
{
// JavaVM とソフト実行用スレッドを関連付け( C++ から Java の機能を使用するために必要 )
if( NativeActivity->vm->AttachCurrentThreadAsDaemon( &env, NULL ) != JNI_OK )
{
return -1 ;
}
// Java のクラス MainActivity を取得
jclass jclass_MainActivity = env->GetObjectClass( NativeActivity->clazz ) ;
// Java のクラス MainActivity のメンバー変数 InputEnd の ID を取得
jfieldID jfieldID_InputEnd = env->GetFieldID( jclass_MainActivity, "InputEnd", "I" ) ;
// Java のクラス MainActivity のメンバー変数 InputEnd の値をローカル変数 InputEnd に代入
InputEnd = env->GetIntField( NativeActivity->clazz, jfieldID_InputEnd ) ;
// InputEnd が 1 になっていたら入力が完了しているので InputString の値を取得する
if( InputEnd == 1 )
{
// Java のクラス MainActivity のメンバー変数 InputString の ID を取得
jfieldID jfieldID_InputString = env->GetFieldID( jclass_MainActivity, "InputString", "Ljava/lang/String;" ) ;
// Java のクラス MainActivity のメンバー変数 InputString の jstring オブジェクトを取得
jstring jstring_InputString = ( jstring )env->GetObjectField( NativeActivity->clazz, jfieldID_InputString ) ;
// Java のクラス MainActivity のメンバー変数 InputString の jstring から C++ 用の文字列のアドレスを取得
const char *chars_InputString = env->GetStringUTFChars( jstring_InputString, NULL ) ;
// 文字列をローカル変数 InputString にコピー
strcpy( InputString, chars_InputString ) ;
// Java のクラス MainActivity のメンバー変数 InputString の jstring から取得した C++ 用の文字列のアドレスを解放
env->ReleaseStringUTFChars( jstring_InputString, chars_InputString ) ;
// Java のクラス MainActivity のメンバー変数 InputString の jstring オブジェクトの参照を削除
env->DeleteLocalRef( jstring_InputString ) ;
}
// Java のクラス MainActivity の参照を削除
env->DeleteLocalRef( jclass_MainActivity ) ;
// JavaVM とソフト実行用スレッドの関連付け終了
NativeActivity->vm->DetachCurrentThread() ;
}
// InputEnd と InputString の状態を画面に描画
DrawFormatString( 0, 100, GetColor( 255,255,255 ), "InputEnd:%d InputString:%s", InputEnd, InputString ) ;
// 裏画面の内容を表画面に反映
ScreenFlip() ;
}
// DXライブラリの後始末
DxLib_End();
// ソフトの終了
return 0;
}