[유니티3D엔진] 안드로이드 유니티 연동_JNI
// 자바 코드
static MainActivity m_Act; // static 함수를 위한 선언
// static 함수라면 MainActivity.this 대신 MainActivity .m_Act
// 유니티로 보내는 값을은 static 선언
static String deviceId = "";
static String accountName = "";
ProgressDialog dialog;
String receive_title = "";
String receive_msg = "";
@Override
protected void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
m_Act = this;
// setContentView(R.layout.activity_main); // 주석 처리
// device 정보 가져오기
TelephonyManager telephony=(TelephonyManager)getSystemService(TELEPHONY_SERVICE);
deviceId = telephony.getDeviceId();
// 계정 정보 가져오기
Account[] accounts = AccountManager.get(getApplicationContext()).getAccounts();
Account account = null;
for(int i=0; i<accounts.length; i++)
{
account = accounts[i];
if(account.type.equals("com.google"))
{
accountName = account.name;
}
//Log.d(tag, "Account - name: " + account.name + ", type :" + account.type);
}
}
// 변수 값들은 바로 처리 가능
public static String AccountName()
{
return accountName;
}
public static String DeviceId()
{
return deviceId;
}
// Toast나 Dialog는 핸들러를 이용
public void shortToast(String msg)
{
Message sendmsg = handler.obtainMessage(0, msg);
handler.sendMessage(sendmsg);
}
public void longtToast(String msg)
{
Message sendmsg = handler.obtainMessage(1, msg);
handler.sendMessage(sendmsg);
}
public void showProgressDilog(String title, String msg)
{
receive_title = "";
receive_msg = "";
receive_title = title;
receive_msg = msg;
handler.sendEmptyMessage( 2 );
}
public void hideProgressDialog()
{
handler.sendEmptyMessage( 3 );
}
public void alert(String msg)
{
receive_msg = "";
receive_msg = msg;
handler.sendEmptyMessage( 4 );
}
public void showDialog(String title, String msg)
{
receive_title = "";
receive_msg = "";
receive_title = title;
receive_msg = msg;
handler.sendEmptyMessage( 5 );
}
public Handler handler = new Handler()
{
public void handleMessage(Message msg)
{
switch (msg.what)
{
case 0:
Toast.makeText(MainActivity.this, (String)msg.obj, Toast.LENGTH_SHORT ).show();
break;
case 1:
Toast.makeText(MainActivity.this, (String)msg.obj, Toast.LENGTH_LONG ).show();
break;
case 2:
showProgressDilog_run(receive_title, receive_msg);
break;
case 3:
hideProgressDialog_run();
break;
case 4:
alert_run(receive_msg);
break;
case 5:
showDialog_run(receive_title, receive_msg);
break;
case 6:
break;
case 7:
break;
default:
break;
}
}
};
// 실행 함수
public void showProgressDilog_run(final String title, final String msg) // 2
{
MainActivity.this.runOnUiThread(new Runnable()
{
public void run()
{
dialog = ProgressDialog.show(MainActivity.this, title, msg, true);
}
});
}
public void hideProgressDialog_run() // 3
{
dialog.dismiss();
}
public void alert_run(String msg) // 4
{
new AlertDialog.Builder(MainActivity.this)
//.setIcon(android.R.drawable.ic_dialog_alert)
//.setTitle(R.string.app_name)
.setMessage( msg )
.setPositiveButton(android.R.string.ok, null)
.create().show();
}
public void showDialog_run(String msg1, String msg2) // 5
{
AlertDialog.Builder ad=new AlertDialog.Builder(MainActivity.this);
ad.setTitle( msg1 );
ad.setMessage( msg2 );
ad.setPositiveButton("OK",new DialogInterface.OnClickListener()
{
public void onClick(DialogInterface dialog,int whichButton)
{
handler = null;
System.exit(0);
}
});
ad.create();
ad.show();
}
// 유니티 코드
// 일반 ( Call ) -> 안드로이드 일반 함수 사용
AndroidJavaClass jc = new AndroidJavaClass("com.unity3d.player.UnityPlayer");
pActivity = jc.GetStatic<AndroidJavaObject>("currentActivity");
pActivity.Call("alert", tmptext);
// static ( CallStatic ) -> 안드로이드의 값을 유니티로 넘겨 줄때 사용
AndroidJavaClass cls_TelActivity = new AndroidJavaClass("com.moduse.summonmonster.MainActivity");
cls_TelActivity.CallStatic<string>("DeviceId");
출저 : http://blog.naver.com/android_h/30157784418