Bra*_*raj 3 java android dialog android-context cocos2d-x
在我的Android和IOS使用的游戏中cocos2dx,我必须显示视频(适用于Android).我打算在Dialog中展示它(在游戏视图的顶部).问题是,我没有任何Activity参考show Dialog(因为Dialogs只能在Activities中显示).尽管如此,在cocos2dx lib文件夹中,有一个Cocos2dxActivity但是我没有得到如何使用它.从C++代码,我从Java类调用静态方法,如下所示
void LMJNICommunicator::showVideo()
{
LOGD("initialiseDatabase inside LMJNICommunicator");
jmethodID methodID = 0;
JNIEnv *pEnv = 0;
pEnv = getJNIEnv();
jclass ret = pEnv->FindClass("com/mobinius/lostmonstersclass/LMDatabaseDataManager");
methodID = pEnv->GetStaticMethodID(ret, "showVideo", "()V");
if (! methodID)
{
LOGD("Failed to find static method id of %s", "showVideo");
return;
}
pEnv->CallStaticVoidMethod(ret,methodID);
pEnv->DeleteLocalRef(ret);
}
Run Code Online (Sandbox Code Playgroud)
我从C++代码调用的静态方法(在普通的Java类中)
Class LMDatabaseDataManager {
public static void showVideo() {
Dialog dialog = new Dialog(Cocos2dxActivity.getInstance());
dialog.show();
// getting Can't create handler inside thread that has not called Looper.prepare() error
}
}
Run Code Online (Sandbox Code Playgroud)
我试图Handler像这样使用但没有得到结果(在该帖子中得到相同的错误).也尝试得到Context像这样的静态.
那么,我的方式是否正确?如果不正确,请建议一种方法如何实现相同的.谢谢.
编辑:
终于得到了答案.早些时候,我试图与应用静态上下文UI线程运行在这个环节,但没有得到......与Cocos2dxActivity活动实例我知道了.
Class LMDatabaseDataManager {
public static void showVideo() {
Cocos2dxActivity.getInstance().runOnUiThread(new Runnable() {
@Override
public void run() {
// TODO Auto-generated method stub
Dialog dialog = new Dialog(Cocos2dxActivity.getInstance());
dialog.show();
}
});
}
}
Run Code Online (Sandbox Code Playgroud)
尝试在Cocos2dxActivity中添加适当的行:
public class Cocos2dxActivity extends Activity {
private static Cocos2dxActivity instance = null;
@Override public void onCreate(Bundle b) {
...
this.instance = this;
}
public static Cocos2dxActivity getInstance() {
return instance;
}
}
Run Code Online (Sandbox Code Playgroud)
当您想要创建对话框时:
if (Cocos2dxActivity.getInstance() != null) {
AlertDialog dialog = new AlertDialog(Cocos2dxActivity.getInstance());
// rest of your dialog code goes here
}
Run Code Online (Sandbox Code Playgroud)