摘要:NDK call intent and show on context
class cIntent
{
jclass m_intentClass;
jmethodID m_intentConstructorMethodId;
jmethodID m_intentSetActionMethodId;
jobject m_contextObj;
jmethodID m_sendBroadcastMethodId;
bool m_bIntentEnd;
jobject createNewIntent(char* intentType,Engine*e_pEngine)
{
jstring intentString = e_pEngine->mApp->appThreadEnv->NewStringUTF(intentType);
jobject intentObject = e_pEngine->mApp->appThreadEnv->NewObject(m_intentClass,m_intentConstructorMethodId);
//call intent
e_pEngine->mApp->appThreadEnv->CallVoidMethod(intentObject, m_intentSetActionMethodId, intentString);
return intentObject;
}
//to contenxt
void sendBroadcast(jobject intentObject,Engine*e_pEngine)
{
//LOG_INFO("Broadcasting intent..");
e_pEngine->mApp->appThreadEnv->CallVoidMethod(m_contextObj,m_sendBroadcastMethodId, intentObject);
//LOG_INFO("Intent broadcasted");
}
public:
cIntent()
{
m_intentClass = 0;
m_intentConstructorMethodId = 0;
m_intentSetActionMethodId = 0;
m_contextObj = 0;
m_sendBroadcastMethodId = 0;
m_bIntentEnd = true;
}
~cIntent();
bool Init(Engine*e_pEngine)
{
m_bIntentEnd = true;
jclass activityClass = e_pEngine->mApp->appThreadEnv->GetObjectClass(e_pEngine->mApp->appThreadThis);
jmethodID appGetContextId = e_pEngine->mApp->appThreadEnv->GetMethodID(activityClass, "getApplicationContext", "()Landroid/content/Context;");
if(appGetContextId == 0)
return false;
m_contextObj = e_pEngine->mApp->appThreadEnv->CallObjectMethod(e_pEngine->mApp->appThreadThis, appGetContextId);
if(m_contextObj == 0)
return false;
jclass contextClass = e_pEngine->mApp->appThreadEnv->FindClass("android/content/Context");
if(contextClass == 0)
return false;
jmethodID sendBroadcastMethodId = e_pEngine->mApp->appThreadEnv->GetMethodID(contextClass, "sendBroadcast", "(Landroid/content/Intent;)V");
if(sendBroadcastMethodId == 0)
return false;
m_intentClass = e_pEngine->mApp->appThreadEnv->FindClass("android/content/Intent");
if(m_intentClass == 0)
return false;
m_intentConstructorMethodId = e_pEngine->mApp->appThreadEnv->GetMethodID(m_intentClass, "<init>", "()V");
if(m_intentConstructorMethodId == 0)
return false;
m_intentSetActionMethodId = e_pEngine->mApp->appThreadEnv->GetMethodID(m_intentClass, "setAction", "(Ljava/lang/String;)Landroid/content/Intent;");
if( m_intentSetActionMethodId == 0)
return false;
return true;
}
//char* intent = "com.example.TEST";
void IntentGo(char*e_strMessage,Engine*e_pEngine)
{
m_bIntentEnd = false;
char* intent = e_strMessage;
jobject l_jobject = createNewIntent(intent,e_pEngine);
sendBroadcast(l_jobject ,e_pEngine );
//e_pEngine->mApp->appThreadEnv->DeleteGlobalRef
m_bIntentEnd = true;
}
};