Unity 안 드 로 이 드 의 Activity 호출

이전http://shuxiayeshou.blog.51cto.com/4452347/1932216
Unity 와 Android 의 결합 에 따 른 문제 및 해결 방법 을 적 었 습 니 다.
요약 하면 Unity 는 간단 한 장면 을 만 들 고 AndroidStudio 는 간단 한 프로젝트 를 만 들 었 는데 그 중에서 MainActivity 는 계승 해 야 한다.
Unity PlayerActivity 의 경우 Unity 프로그램 이 Android 엔 드 MainActivity 방법 을 호출 할 수 있 습 니 다.
안 드 로 이 드 프로젝트 에 뉴 액 티 비 티 가 하나 더 있다 면 유 니 티 를 통 해 열 어 보 겠 습 니 다. 어떻게 하 죠?
아래 의 예 도 인터넷 에서 찾 았 지만 운행 에 문제 가 있어 서 제 가 또 수정 을 해 야 사용 할 수 있 습 니 다.
우선, AndroidMenifest. xml 에 이 Activity 를 넣 어야 합 니 다.
xml version="1.0" encoding="utf-8"?>
xmlns:android="http://schemas.android.com/apk/res/android"
   
package="com.reach.test">

           
android:allowBackup="true"
       
android:icon="@mipmap/ic_launcher"
       
android:label="@string/app_name"
       
android:roundIcon="@mipmap/ic_launcher_round"
       
android:supportsRtl="true"
       
android:theme="@style/AppTheme"
       
>
       android:name=".MainActivity"
           
android:configChanges="fontScale|keyboard|keyboardHidden|locale|mnc|mcc|navigation|orientation|screenLayout|screenSize|smallestScreenSize|uiMode|touchscreen">
           
               android:name="android.intent.action.MAIN" />

               android:name="android.intent.category.LAUNCHER" />
           

           android:name="unityplayer.UnityActivity" android:value="true" />
       

       
           android:name=".OpenActivity1">
       

   


위 와 같은 노 란 글자 부분.
이 OpenActivity 1 이 있 는 이상 자바 Class, OpenActivity 1 이 있 고 Activity 를 계승 할 수 있 습 니 다.
MainActivity 와 같은 경로 에서
그리고 layot 폴 더 아래 에 도 xml 부 국 파일 이 있 습 니 다. 저 는 activity 라 고 부 릅 니 다.new.xml
OpenActivity 1 의 코드 는:
package com.reach.test;
/**
 * Created by Administrator on 2017/6/5.
 */
import android.app.Activity;
import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.TextView;
public class OpenActivity1 extends Activity{
    @Override
    public void onCreate(Bundle savedInstanceState)
    {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_new);
        TextView text=(TextView)this.findViewById(R.id.textView1);
        text.setText(this.getIntent().getStringExtra("name"));
        Button close=(Button)this.findViewById(R.id.button0);
        close.setOnClickListener(new OnClickListener() {
            @Override
            public void onClick(View v) {
                OpenActivity1.this.finish();
            }
        });
    }
}

그 중에서 TextView 는 그 위 에 추 가 된 구성 요소 입 니 다. 먼저 신경 쓰 지 마 세 요. 가장 쉬 운 것 은 onCreate 방법 앞의 두 줄 문장 입 니 다.
유 니 티 와 의 대화 에 사용 되 는 MainActivity 코드 는 다음 과 같 습 니 다.
package com.reach.test;
import android.app.Activity;
import android.os.Bundle;
import com.unity3d.player.UnityPlayerActivity;
import android.content.Context;
import android.content.Intent;
public class MainActivity extends UnityPlayerActivity {
    Activity mActivity=null;
    Context mContext=null;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        mActivity=this;
        mContext=this;
        StartActivity1("          Activity");
    }
    public void StartActivity1(String name)
    {
        Intent intent=new Intent(mContext, OpenActivity1.class);
        intent.putExtra("name", name);
        mActivity.startActivity(intent);
    }
}

그 중에서 StartActivity 1 방법 은 OpenActivity 1 을 여 는 데 사 용 됩 니 다. 먼저 app 이 실 행 될 때 onCreate 에서 마지막 줄 이 호출 되 었 기 때문에 처음에 OpenActivity 1 을 먼저 볼 수 있 습 니 다.
한 마디 로 이 방법 은 OpenActivity 1 을 열 고 Unity 에서 호출 하 는 것 입 니 다.
그럼 뒤 돌아 보면 Unity.
우 리 는 Test. cs 라 는 스 크 립 트 를 만 들 고 장면 의 한 GameObject 에 마음대로 걸 면 됩 니 다.
코드 는 다음 과 같 습 니 다:
using UnityEngine;
using System.Collections;
public class Test : MonoBehaviour {
// Use this for initialization
void Start () {
}
// Update is called once per frame
void Update () {
        if (Input.GetKeyDown(KeyCode.Escape) || Input.GetKeyDown(KeyCode.Home) || Input.GetKeyDown(KeyCode.Menu))
        {
            Application.Quit();
        }
}
    private void OnGUI()
    {
        if(GUILayout.Button("Open Activity", GUILayout.Height(80)))
        {
            AndroidJavaClass jc = new AndroidJavaClass("com.unity3d.player.UnityPlayer");
            AndroidJavaObject jo = jc.GetStatic("currentActivity");
            jo.Call("StartActivity1", "Unity   android    ");
        }
    }
}

OnGui 방법 을 주로 봅 니 다.
안에 버튼 이 하나 그 려 져 있 는데, 위 에 Open Activity 가 표시 되 어 있 습 니 다.
다음 세 줄 코드 는 단 추 를 누 르 면 실행 되 는 동작 을 규정 하고 있 습 니 다. 이 단 추 를 누 르 면 Android 의 StartActivity 1 방법 을 호출 합 니 다.
OpenActivity 1 호출
앞의 두 줄 은 기본적으로 고정 용법 이다.
세 번 째 줄 은 Android 프로젝트 에서 MainActivity 의 StartActivity 1 을 호출 하 는 방법 입 니 다. 즉, OpenActivity 1 을 여 는 것 입 니 다.
여기 서 주의해 야 할 것 은 바로 두 번 째 줄 이다.
AndroidJavaObject jo = jc.GetStatic("currentActivity");

여기 서 사용 하 는 것 은 jc. GetStatic 방법 입 니 다. 문제 없습니다.
원래 의 예 는 jc. Get 방법 (뒤의 매개 변 수 는 모두 같다) 을 사 용 했 는데 실제 유 니 티 장면 에서 단 추 를 누 르 면 반응 이 없다.
또 하 나 는 원래 의 사례 에서 OpenActivity 1 이 열 린 것 도 MainActivity 의 layot 입 니 다. 즉,
setContentView(R.layout.activity_main);

이렇게 하면 앱 을 실행 하면 비켜라.
그래서 나 는 activity 를 증가 시 켰 다.new, 그리고 OpenActivity 1 을 이 layout 에 대응 하도록 합 니 다.
그래서 바 꿨 어 요.
setContentView(R.layout.activity_new);

오케이 하 겠 습 니 다.

좋은 웹페이지 즐겨찾기