【发布时间】:2017-04-21 02:40:42
【问题描述】:
我正在使用 C++ 为 Android 制作一个带有 cocos2d-x 的游戏。现在我正在寻找一种方法来打开另一个 Android 应用程序(如 YouTube、Google Play 商店等),通过一个按钮从我的游戏中使用他们的包名。我四处搜索,发现它可以用 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 文件,使用 cmd 编译并在 Android Studio 上使用模拟器运行,我从未使用过 Android Studio 中由 cocos2d-x 生成的 .java 文件,引擎只是为我准备好了一切,所以我这里有点糊涂了。
更新 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));
非常感谢您的关注和帮助。
【问题讨论】:
标签: android-ndk java-native-interface cocos2d-x