x


Problem reading sensor plugin, event won't trigger

When I run my plugin onSensorChanged won't trigger, leaving me without any information from the sensors.

Here is my Java Class code:

package com.skanska.helloandroid;

import android.app.Activity;
import android.content.Context;
import android.hardware.Sensor;
import android.hardware.SensorEvent;
import android.hardware.SensorEventListener;
import android.hardware.SensorManager;


public class HelloAndroidActivity extends Activity implements SensorEventListener{

private SensorManager mSensorManager;
private float[] mGData = new float[3];
private float[] mMData = new float[3];
private float[] mR = new float[16];
private float[] mI = new float[16];
private float[] mOrientation = new float[3];
private Sensor msensor, gsensor;

public float deg = 0;
private String degString;

public HelloAndroidActivity(Activity currentActivity) {
mSensorManager = (SensorManager) getSystemService(Context.SENSOR_SERVICE);

gsensor = mSensorManager.getDefaultSensor(Sensor.TYPE_ACCELEROMETER);
msensor = mSensorManager.getDefaultSensor(Sensor.TYPE_MAGNETIC_FIELD);

mSensorManager.registerListener(this, gsensor, SensorManager.SENSOR_DELAY_GAME);
mSensorManager.registerListener(this, msensor, SensorManager.SENSOR_DELAY_GAME);
}

public void onAccuracyChanged(Sensor sensor, int accuracy) {
}

public void onSensorChanged(SensorEvent event) {        

int type = event.sensor.getType();
if (type == Sensor.TYPE_ACCELEROMETER) {

for (int i=0 ; i<3 ; i++)
mGData[i] = event.values[i];

}
else if (type == Sensor.TYPE_MAGNETIC_FIELD) {

for (int i=0 ; i<3 ; i++)
mMData[i] = event.values[i];

} 
else {
return;
}

SensorManager.getRotationMatrix(mR, mI, mGData, mMData);

SensorManager.getOrientation(mR, mOrientation);

final float radtodeg = (float)(180.0f/Math.PI);
deg = mOrientation[0]*radtodeg;
}

public String getDeg(){
degString = Float.toString(deg);
return degString;
}    
}

My javabridge(.cpp):

include <stdlib.h>
include <jni.h>
include <android/log.h>

extern "C"
{

JavaVM* java_vm;
jobject HelloAndroidActivity;
jmethodID getDeg;

jint JNI_OnLoad(JavaVM* vm, void* reserved)
{
java_vm = vm;

JNIEnv* jni_env = 0;
java_vm->AttachCurrentThread(&jni_env, 0);

jclass cls_Activity = jni_env->FindClass("com/unity3d/player/UnityPlayer");
jfieldID fid_Activity = jni_env->GetStaticFieldID(cls_Activity, "currentActivity", "Landroid/app/Activity;");
jobject obj_Activity = jni_env->GetStaticObjectField(cls_Activity, fid_Activity);

jclass cls_HelloAndroidActivity = jni_env->FindClass("com/skanska/helloandroid/HelloAndroidActivity");
jmethodID mid_HelloAndroidActivity = jni_env->GetMethodID(cls_HelloAndroidActivity, "<init>", "(Landroid/app/Activity;)V");
jobject obj_HelloAndroidActivity = jni_env->NewObject(cls_HelloAndroidActivity, mid_HelloAndroidActivity, obj_Activity);

HelloAndroidActivity = jni_env->NewGlobalRef(obj_HelloAndroidActivity);
getDeg = jni_env->GetMethodID(cls_HelloAndroidActivity, "getDeg", "()Ljava/lang/String;");

return JNI_VERSION_1_6;
}

char* dec = 0;
const char* getDeclination()
{


JNIEnv* jni_env = 0;
java_vm->AttachCurrentThread(&jni_env, 0);

jstring str_dec = (jstring)jni_env->CallObjectMethod(HelloAndroidActivity, getDeg);

jsize stringLen = jni_env->GetStringUTFLength(str_dec);

dec = new char[stringLen+1];

const char* content = jni_env->GetStringUTFChars(str_dec, 0);

strcpy(dec, content);

return dec;
}
}

My C# Call javacode script:

using UnityEngine;
using System;
using System.Collections;
using System.Runtime.InteropServices;

public class CallJavaCode : MonoBehaviour {


[DllImport("javabridge")]
private static extern IntPtr getDeclination();



public float   deg;
private string decString;



IntPtr stringPtr = getDeclination();

void Start ()
{
stringPtr=getDeclination();
Debug.Log("stringPtr = " +stringPtr);
String cache = Marshal.PtrToStringAnsi(stringPtr);
Debug.Log("getDeclination returned " + cache);
decString = cache;

deg = float.Parse(decString);   

Debug.Log("Deg= " + deg);
transform.eulerAngles = new Vector3(0, 0, deg);
    }
void Update()
    {
stringPtr = getDeclination();
Debug.Log("stringPtr = " +stringPtr);
String cache = Marshal.PtrToStringAnsi(stringPtr);
Debug.Log("getDeclination returned " + cache);
decString = cache;

deg = float.Parse(decString);

transform.eulerAngles = new Vector3(0, 0, deg);
Debug.Log("Deg = " + deg);   
    }  

void OnGUI ()
{
GUI.Label(new Rect (15, 125, 450, 100), decString);     
}
}

I might aswell post my manifest since I have no clue what so ever manifest:

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.skanska.helloandroid"
android:versionCode="1"
android:versionName="1.0">
<uses-sdk android:minSdkVersion="11" />

<application android:icon="@drawable/icon" android:label="@string/app_name" android:debuggable="true">
<activity android:name=".HelloAndroidActivity"
android:label="@string/app_name">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>

</application>
</manifest>

Am I missing something obvious? Is it even possible to make a event based plugin?

Thanks in advance,

Martin

more ▼

asked Jun 21 '11 at 02:34 PM

HolmMa gravatar image

HolmMa
1 1 1 1

(comments are locked)
10|3000 characters needed characters left

1 answer: sort voted first

Instead of writing everything yourself, you could use the GyroDroid plugin by Prefrontal Cortex, it provides access to each and every android sensor an Android device is capable of:

goo.gl/8ZIM7

more ▼

answered Sep 06 '11 at 04:14 PM

felix. gravatar image

felix.
1.9k 18 23 47

(comments are locked)
10|3000 characters needed characters left
Your answer
toggle preview:

Up to 2 attachments (including images) can be used with a maximum of 524.3 kB each and 1.0 MB total.

Follow this question

By Email:

Once you sign in you will be able to subscribe for any updates here

By RSS:

Answers

Answers and Comments

Topics:

x4149
x2461
x392
x295
x11

asked: Jun 21 '11 at 02:34 PM

Seen: 1444 times

Last Updated: Sep 06 '11 at 04:14 PM