在unity3d中返回android的原生activity,按照网上的许多教程,互相调用方法基本都没什么问题了,但是在返回android的原生activity的时候,整个程序都会关闭,最后在 manifest 配置文件中加入线程名解决。先罗列代码:
第一步在unity3d 的c#中回调外壳activity的方法:
public void onBackClick(){ AndroidJavaClass jc = new AndroidJavaClass("com.unity3d.player.UnityPlayer"); AndroidJavaObject jo = jc.GetStatic<AndroidJavaObject>("currentActivity"); jo.Call("back","返回android"); }
第二部在外壳activiti中处理(我是新建了一个继承UnityPlayerNativeActivity的类):
public class WeivaUPNActivity extends UnityPlayerNativeActivity { public void back(String arg){ Intent intent = new Intent(); intent.setClass(WeivaUPNActivity.this, LoginOkActivity.class); startActivity(intent); WeivaUPNActivity.this.finish(); } }
视乎看起来没什么问题,但是UnityPlayer 被finish()后会把整个程序给exit,导致无法返回 LoginOkActivity 。如果不对UnityPlayer进行finish,可以返回LoginOkActivity,但是这程序无法退出,因为在退出的时候又会再次打开UnityPlayer。
谷歌了很多帖子,视乎很复杂,也考虑过回调时不finishi,而是把WeivaUPNActivity实例静态化后,在退出时在静态退出,但是感觉很麻烦。最后在一片老外的帖子发现一条线索,可以在manifest配置文件中设置不同的进程名,从而避免UnityPlayer finish时关闭整个程序:
<activity android:label="@string/app_name" android:screenOrientation="fullSensor" android:launchMode="singleTask" android:configChanges="mcc|mnc|locale|touchscreen|keyboard|keyboardHidden|navigation|orientation|screenLayout|uiMode|screenSize|smallestScreenSize|fontScale" android:name="com.weiva.WeivaUPNActivity"<font color="#ff0000"> android:process=":Unity3D"</font>> <meta-data android:name="unityplayer.UnityActivity" android:value="true" /> <meta-data android:name="unityplayer.ForwardNativeEventsToDalvik" android:value="false" /> </activity>
原帖地址:http://answers.unity3d.com/questions/587979/how-do-i-stop-munityplayerquit-closing-the-entire.html