Android

[유니티3D엔진] 안드로이드 유니티 연동_JNI

by badung007 posted Oct 26, 2013
?

단축키

Prev이전 문서

Next다음 문서

ESC닫기

크게 작게 위로 아래로 댓글로 가기 인쇄

 

// 자바 코드

 

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