Android : Intent not working using JNI

on Friday, March 20, 2015


Hey I'm starting an intent in my native android app. The intent popup appears in the app, I select "give permission", but when I try and use the permission I have, I get an error saying I need to get permissions to use the feature.


Here is my intent code:



void getIntent(struct android_app* state, JNIEnv* env)
{
jobject lNativeActivity = state->activity->clazz;
jclass intentClass = (*env)->FindClass(env, "android/content/Intent");

jmethodID newIntent = (*env)->GetMethodID(env, intentClass, "<init>", "()V");
jobject intent = (*env)->AllocObject(env, intentClass);
(*env)->CallVoidMethod(env, intent, newIntent);

jmethodID setAction = (*env)->GetMethodID(env, intentClass, "setAction","(Ljava/lang/String;)Landroid/content/Intent;");
jstring actionString = (*env)->NewStringUTF(env, "android.intent.action.REQUEST_TANGO_PERMISSION");
(*env)->CallObjectMethod(env, intent, setAction, actionString);

jmethodID putExtra = (*env)->GetMethodID(env, intentClass, "putExtra","(Ljava/lang/String;Ljava/lang/String;)Landroid/content/Intent;");
jstring extratype = (*env)->NewStringUTF(env, "PERMISSIONTYPE");
jstring extraValue = (*env)->NewStringUTF(env, "MOTION_TRACKING_PERMISSION");
(*env)->CallObjectMethod(env, intent, putExtra, extratype, extraValue);

jclass activityClass = (*env)->FindClass(env, "android/app/Activity");
jmethodID startActivity = (*env)->GetMethodID(env, activityClass,"startActivity", "(Landroid/content/Intent;)V");
(*env)->CallVoidMethod(env, lNativeActivity, startActivity, intent);
}


After running this, the popup for the intent appears and I give permission to the app for motion tracking. Here is the tango code which needs the intent:



void doAllTheTangoStuff(struct android_app* state, JNIEnv* env)
{

jobject activity = state->activity->clazz;
if (TangoService_initialize(env, activity) != TANGO_SUCCESS) {
LOGE("TangoService_initialize(): Failed");
return;
}

LOGI("Step1");

TangoCoordinateFramePair pair = {TANGO_COORDINATE_FRAME_START_OF_SERVICE, TANGO_COORDINATE_FRAME_DEVICE };
TangoService_connectOnPoseAvailable(1, &pair, onPoseAvailable);

LOGI("Step2");

config = TangoService_getConfig(TANGO_CONFIG_DEFAULT);
if (config == NULL) {
LOGE("TangoService_getConfig(): Failed");
return;
}

LOGI("Step3");
if (TangoService_connect(NULL, config) != TANGO_SUCCESS) {
LOGE("TangoService_connect(): Failed");
return;
}

LOGI("Step4");

}


When I get to the line where I register the OnPoseAvailable callback (before Step2) I get the following error:



I/native-activity(17885): Step1
W/tango_client_api( 188): The user has not give application 'com.autodesk.test123' the permission t
o use the Tango 'AMotion Tracking' capabilities. To ask the user of your app for this permission, in
voke the Tango Android permissions intent for 'Motion Tracking'
I/tango_client_api( 188): Tango Service: setPoseListenerFrames, internal status -3
E/tango_client_api(17885): TangoErrorType TangoService_connectOnPoseAvailable(uint32_t, const TangoC
oordinateFramePair*, void (*)(void*, const TangoPoseData*)): Internal Error: setPoseListenerFrames f
ailed.
I/native-activity(17885): Step2


Any ideas why my permission would not work or be revoked? Thanks!


0 comments:

Post a Comment