Я получил следующий код внутри моего templateApp.java:
package com.android.templateApp;
import android.app.Activity;
import android.os.Bundle;
import android.hardware.Sensor;
import android.hardware.SensorEvent;
import android.hardware.SensorEventListener;
import android.hardware.SensorManager;
public class templateApp extends Activity implements SensorEventListener
{
GL2View mView;
SensorManager mSensorManager;
@Override protected void onCreate(Bundle icicle)
{
super.onCreate( icicle );
mSensorManager = ( SensorManager ) getSystemService( SENSOR_SERVICE );
mView = new GL2View( getApplication() );
mSensorManager.registerListener( this,
mSensorManager.getDefaultSensor( SensorManager.SENSOR_ACCELEROMETER ),
SensorManager.SENSOR_DELAY_GAME );
setContentView( mView );
}
@Override protected void onResume()
{
super.onResume();
mView.onResume();
}
public static native void Accelerometer( float x, float y, float z );
public void onSensorChanged( SensorEvent event )
{
float x = event.values[ SensorManager.DATA_X ],
y = event.values[ SensorManager.DATA_Y ],
z = event.values[ SensorManager.DATA_Z ];
// ALWAYS CRASH HERE!!!!
Accelerometer( x, y, z );
}
public void onAccuracyChanged( Sensor sensor, int arg1 ) {}
}
И внутри моего templateApp.cpp я получил следующее, чтобы соединить функцию акселерометра:
extern "C"
{
JNIEXPORT void JNICALL Java_com_android_templateApp_GL2View_Init( JNIEnv *env, jobject obj, jint width, jint height );
JNIEXPORT void JNICALL Java_com_android_templateApp_templateApp_Accelerometer( JNIEnv *env, jfloat x, jfloat y, jfloat z );
};
JNIEXPORT void JNICALL Java_com_android_templateApp_GL2View_Init( JNIEnv *env, jobject obj, jint width, jint height )
{ Init( width, height); }
JNIEXPORT void JNICALL Java_com_android_templateApp_templateApp_Accelerometer( JNIEnv *env, jfloat x, jfloat y, jfloat z )
{ Accelerometer( x, y,z ); }
Когда янаведите указатель мыши на eclipse, чтобы показать, что вызов принадлежит com.android.templateApp.templateApp.Accelerometer, и это именно то, что я объявляю, однако всегда выдает сообщение об ошибке UnsatisfiedLinkError.что мое родное определение неверно) но оно продолжает падать при вызове акселерометра внутри java-кода ... Странно то, что моя функция инициализации, которая находится внутри моего GL2View.java, работает безупречно.Есть ли что-то, что мешает мне вызывать нативный API из основного файла, который расширяет Activity?Потому что датчик работает, я печатаю значение его родного вызова, что сбой, и я не знаю, почему.
Tks заранее!