2017-04-21 18 views
0

私はC++を使ってAndroid用のcocos2d-xでゲームを作っています。今では、自分のゲーム内のボタン名を使って別のAndroidアプリ(YouTube、Google Playストアなど)を開く方法を探しています。私の周りを検索し、それがこのようなもので、Javaコードで行うことができることを見出した:cocos2d-xを使って別のAndroidアプリを起動するには?

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

私の質問はである:それは私のネイティブコードで別のAndroidアプリを開くことは可能です(.CPPファイル)または私はそれらをJava側(.javaファイル)に入れなければなりませんか?私が.javaファイルでそれを行う必要がある場合、どこに置くべきですか?私はいつもVisual Studioで.cppファイルを使って作業し、cmdでコンパイルし、Androidスタジオでエミュレータで動作させます。私はAndroidスタジオでcocos2d-xで生成された.javaファイルで作業したことはありません。ここでちょっと混乱しました。

アップデート1:

アビシェークアーリア人のアドバイスは動作しますが、私は別のアプリケーションにいるとき、私のゲームは、履歴書に墜落しました。私は他のアプリを開く前にいくつかのアクションを実行しようとしています。それらのアクションを削除してopenAppの機能だけを残すと問題なく実行できるため、クラッシュが発生する可能性があります。

私の期待:ボタンを押す=>私のゲームを一時停止し、あなたのAndroidでチューブを開く=>押し戻るボタン=>あなたはチューブを止めてゲームを再開します。

どうすればいいですか:私はあなたのチューブを開くことができましたが、戻るボタンを押すとアプリケーションがクラッシュしました。

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

任意のアイデアは、私はそれをどのように修正することができます:私は、Android Studioから次のエラーコードを得ましたか。

マイコード:

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)); 

ご注意とヘルプは非常に高く評価されます。

答えて

2

要件に合わせて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); 
     } 
    } 
} 

完了!
まだ、私は自分の.cppファイルにメソッドを作成するために、私はopenOtherAppメソッドをC++から呼び出す必要があります。

#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);

+0

こんにちは@Abhishekアーリアを​​開きたい、あなたの答えのためのおかげで、しかし、私は別のアプリケーションにいるとき、私のアプリがクラッシュした問題に遭遇したとプレス戻って私を再開するためにゲーム。詳細は、私の記事の** Update 1 **をご覧ください。 –

関連する問題