Unity調用Android的Activity

來源:互聯網
上載者:User

標籤:unity   android   activity   互動   

之前http://shuxiayeshou.blog.51cto.com/4452347/1932216

寫了關於Unity與Android結合所遇到的問題及解決方案


總結一下,Unity做一個簡單的情境,AndroidStudio建一個簡單的項目,其中MainActivity是要繼承自

UnityPlayerActivity的,這樣Unity程式可以調用Android端MainActivity的方法了


那如果Android項目中還有一個NewActivity,我們要通過Unity把他開啟咋辦呢


以下用的例子也是從網上找的,但是運行有問題,我又進行了修改才可以用。

首先,在AndroidMenifest.xml中要把這個Activity加進去


<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
   package="com.reach.test">

   <application
       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"
       >
       <activity android:name=".MainActivity"
           android:configChanges="fontScale|keyboard|keyboardHidden|locale|mnc|mcc|navigation|orientation|screenLayout|screenSize|smallestScreenSize|uiMode|touchscreen">
           <intent-filter>
               <action android:name="android.intent.action.MAIN" />

               <category android:name="android.intent.category.LAUNCHER" />
           </intent-filter>
           <meta-data android:name="unityplayer.UnityActivity" android:value="true" />
       </activity>
       <activity android:theme="@android:style/Theme.NoTitleBar.Fullscreen"
           android:name=".OpenActivity1">
       </activity>
   </application>

</manifest>


如上黃字部分

既然有這個OpenActivity1,那必然是有一個Java Class,OpenActivity1,繼承Activity

與MainActivity在同一路徑下

而且在layout檔案夾下也有對應的xml部局檔案,我命名為activity_new.xml


OpenActivity1的代碼為:

com.reach.testandroid.app.Activityandroid.content.Intentandroid.os.Bundleandroid.view.Viewandroid.view.View.OnClickListenerandroid.widget.Buttonandroid.widget.TextViewOpenActivity1 Activity{    (Bundle savedInstanceState)    {        TextView text=(TextView).findViewById(R.id.)text.setText(.getIntent().getStringExtra())Button close=(Button).findViewById(R.id.)close.setOnClickListener(OnClickListener() {            (View v) {                OpenActivity1..finish()}        })}}


其中TextView什麼的都是加在其上的組件,先不用管,最簡單的就是黃字那兩行就可以了


而我們用於與Unity互動的MainActivity代碼如下

com.reach.testandroid.app.Activityandroid.os.Bundlecom.unity3d.player.UnityPlayerActivityandroid.content.Contextandroid.content.IntentMainActivity UnityPlayerActivity {    Activity =Context =(Bundle savedInstanceState) {        .onCreate(savedInstanceState)==StartActivity1()}    (String name)    {        Intent intent=Intent(OpenActivity1.)intent.putExtra(name).startActivity(intent)}}


其中StartActivity1方法用於開啟OpenActivity1,先是app運行時由於在onCreate中最後一行調用了,所以一開始會先看到OpenActivity1(先不糾結這個)

總之,此方法就是開啟OpenActivity1的,而且會在Unity中調用


那回頭看Unity

我們建一個指令碼,叫Test.cs,隨便掛在情境中的某個GameObject上就行

代碼如下:

using UnityEngine;using System.Collections;public class Test : MonoBehaviour {// Use this for initializationvoid Start () {}// Update is called once per framevoid 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<AndroidJavaObject>("currentActivity");            jo.Call("StartActivity1", "Unity中調出android的方法了");        }    }}

主要看OnGui方法

裡面畫出了一個按鈕,上面顯示Open Activity

下面三行代碼規定了按鈕點擊執行的操作

前兩行基本是固定用法

第三行則是調用Android項目中MainActivity裡的StartActivity1方法,也就是開啟OpenActivity1

這裡需要注意一點,就是第二行

AndroidJavaObject jo = jc.GetStatic<AndroidJavaObject>("currentActivity");

這裡用的是jc.GetStatic方法,是沒有問題的

而原例用的是jc.Get方法(後面的參數什麼的都一樣),實際在Unity情境中點擊按鈕是沒有反應的


還有一點,原例中OpenActivity1所開啟的也是MainActivity的layout,即

setContentView(R.layout.activity_main);

這樣做,運行App就閃退。

於是我增加了activity_new,並讓OpenActivity1對應於此layout

所以改成了

setContentView(R.layout.activity_new);

就OK了



本文出自 “樹下野獸” 部落格,請務必保留此出處http://shuxiayeshou.blog.51cto.com/4452347/1932442

Unity調用Android的Activity

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.