在非UI线程中切换Android Activity

4
我正在处理一个与Android Unity3D项目有关的问题,需要将一些东西发布到Facebook上。基本上,应用程序运行在我无法控制的Activity上。Facebook单点登录要求我提供一个Activity来显示它的内容。
现在的问题是,来自Unity活动的触发器(通过JNI从本机代码中)要发布到Facebook。这基本上是我的纯Java对象作为连接器,是从Unity在本机代码中创建的,我可以调用它的方法。我还可以访问当前Activity的引用。但仍然无法对其进行任何操作。
我总是得到:
AndroidRuntime(12845): java.lang.RuntimeException: Can't create handler inside thread that has not called Looper.prepare()

我尝试将当前活动引用作为要绑定到Facebook授权(authorize())的活动,但是出现了错误。 我尝试切换到我的自己的活动,想在其中启动Facebook。 结果仍然是相同的错误。 我尝试了以下方法:

Intent intent = new Intent(UnityPlayer.currentActivity.getApplicationContext(), MyActivity.class);
UnityPlayer.currentActivity.startActivity(intent);

还有一些类似的事情,但无法切换活动。

我该如何解决这个问题?

谢谢。

1个回答

7
那是因为UI操作不能在工作线程上运行。你应该尝试使用runOnUiThread
UnityPlayer.currentActivity.runOnUiThread(new Runnable() {
public void run() {
  Intent intent = new Intent(UnityPlayer.currentActivity.getApplicationContext(),MyActivity.class);


UnityPlayer.currentActivity.startActivity(intent);
 }

});

我不得不稍微修改你建议的代码,但它完美地运行了,非常感谢。我自己永远也想不到这个解决方法;o) - Stan
请问您能否分享一下您是如何确切地使它工作的?非常感谢。 - Dominik
1
我搞定了!! 我把我的教程发到这里了:http://forum.unity3d.com/threads/138036-Integrating-a-number-of-Android-SDKs-(JAR)-to-Unity-Android?p=940739#post940739 - Dominik

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接