NDK call intent and show on context

  • 995
  • 0
  • 2013-06-05

摘要: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;
}
};