如何使用 cocos2d-x 启动另一个 Android 应用程序?

How to launch another Android app using cocos2d-x?

我正在用 cocos2d-x 为 Android 使用 C++ 制作游戏。现在,我正在寻找一种方法来打开另一个 Android 应用程序(例如 YouTube、Google Play Store,...),通过按钮从我的游戏中使用它们的包名称。我四处搜索,发现它可以在 Java 代码中完成,代码如下:

Intent launchIntent = getPackageManager().getLaunchIntentForPackage("com.package.address");
if (launchIntent != null) { 
    startActivity(launchIntent);//null pointer check in case package name was not found
}

我的问题是:是否可以在我的本机代码(.cpp 文件)中打开另一个 Android 应用程序,或者我必须将它们放在 java 端(.java 文件)?如果我必须在 .java 文件中进行,我应该把它放在哪里?我总是在 Visual Studio 中使用 .cpp 文件,在 Android Studio 上使用 cmd 和 运行 模拟器进行编译,我从未使用过 [=] 生成的 .java 文件45=] 在 Android Studio 中,引擎只是为我准备好一切,所以我在这里有点困惑。

更新 1:

Abhishek Aryan 的建议有效,但当我在另一个应用程序中时,我的游戏在恢复时崩溃了。我试图在打开其他应用程序之前执行一些操作,它们可能会导致崩溃,因为如果我删除这些操作并单独保留 openApp 功能,我可以 运行 它没有任何问题。

我的期望: 按下按钮 => 暂停我的游戏并在 Android 上打开 You Tube => 按返回按钮 => 暂停 You Tube 并继续我的游戏.

发生了什么: 我可以打开 You Tube,但当我按下后退按钮时我的应用程序崩溃了。我从 Android Studio 得到以下错误代码:

A/libc: Fatal signal 11 (SIGSEGV) at 0x0004fb18 (code=1), thread 1975 (Thread-55)

知道我该如何解决吗?

我的代码:

   auto imageOpeningAction = CallFunc::create([&]() {
    mOpeningImage->setEnabled(true);
    mOpeningImage->setOpacity(255);
    mOpeningImage->setPosition(menuItem->getPosition());
    mOpeningImage->runAction(fullScale);
});
   auto imageClosingAction = CallFunc::create([&]() {
    mOpeningImage->runAction(reverseScale);
    mOpeningImage->setOpacity(0);
    mOpeningImage->setEnabled(false);
});
   auto openAnotherApp = CallFunc::create([&]() {  // Open YouTube app
    HelloWorld::openApp(packageName);
});
runAction(Sequence::create(imageOpeningAction->clone(), DelayTime::create(0.5f), openAnotherApp->clone(), nullptr));

非常感谢您的关注和帮助。

您需要使用 JNI 来满足您的要求。

创建一个方法来打开您 AppActivity 中的任何应用程序。

public class AppActivity extends Cocos2dxActivity {

   private static Activity activity;

   @Override
   protected void onCreate(Bundle savedInstanceState) {
      super.onCreate(savedInstanceState);
      activity=this;
  }

  public static void openOtherApp(String packageName){

        Intent launchIntent = activity.getPackageManager().getLaunchIntentForPackage(packageName);
        if (launchIntent != null) {
            activity.startActivity(launchIntent);
        }
    }
}

完成!
还没有,现在我只需要从 c++ 调用 openOtherApp 方法,所以我在我的 .cpp 文件中创建了一个方法。

#if (CC_TARGET_PLATFORM == CC_PLATFORM_ANDROID)
#include "platform/android/jni/JniHelper.h"
#endif

void openApp(std::string packageName){

#if(CC_TARGET_PLATFORM==CC_PLATFORM_ANDROID)

    JniMethodInfo methodInfo;

    const char* class_name="org/cocos2dx/cpp/AppActivity";   
    const char* method_name="openOtherApp";    
    const char* parameter= "(Ljava/lang/String;)V";

    if (! cocos2d::JniHelper::getStaticMethodInfo(methodInfo, class_name, method_name ,parameter )) {
        return;
    }

    jstring jStringParam = methodInfo.env->NewStringUTF(packageName.c_str());

    methodInfo.env->CallStaticVoidMethod(methodInfo.classID, methodInfo.methodID,jStringParam);
    methodInfo.env->DeleteLocalRef(methodInfo.classID);

#endif

}

想开通facebook通话openApp(com.facebook.katana);