我正在编写一段代码,使用户能够摇动手机并从摇动中显示或启动活动。我试图弄清楚为什么当我摇动设备时代码没有运行。然而,当我在服务之外运行此代码时,它可以完美运行。
注意:我检查了该服务确实启动了。要启动的课程在我的清单中,我再次检查。没有错误存在,更奇怪的是,代码在启动时不会停止或失败。它只是不按我说的做。是的,所有适当的权限也都设置好了。
所以这里是代码:
import android.app.Service;
import android.content.Context;
import android.content.Intent;
import android.hardware.Sensor;
import android.hardware.SensorEvent;
import android.hardware.SensorEventListener;
import android.hardware.SensorManager;
import android.os.Bundle;
import android.os.IBinder;
import android.widget.Toast;
public class GMeter extends Service implements SensorEventListener {
private float mLastX, mLastY, mLastZ;
private boolean mInitialized;
private SensorManager mSensorManager;
private Sensor mAccelerometer;
private final float NOISE = (float) 2.0;
/** Called when the activity is first created. */
public void onCreate(Bundle savedInstanceState) {
mInitialized = false;
mSensorManager = (SensorManager) getSystemService(Context.SENSOR_SERVICE);
mAccelerometer = mSensorManager.getDefaultSensor(Sensor.TYPE_ACCELEROMETER);
mSensorManager.registerListener(this, mAccelerometer , SensorManager.SENSOR_DELAY_NORMAL);
Toast.makeText(this, "Starting Service", Toast.LENGTH_LONG).show();
}
protected void onResume() {
mSensorManager.registerListener(this, mAccelerometer, SensorManager.SENSOR_DELAY_NORMAL);
}
protected void onPause() {
mSensorManager.unregisterListener(this);
}
@Override
public void onAccuracyChanged(Sensor sensor, int accuracy) {
// can be safely ignored for this demo
}
@Override
public void onSensorChanged(SensorEvent event) {
float x = event.values[0];
float y = event.values[1];
float z = event.values[2];
double a = Math.sqrt(Math.pow(x, 2) + Math.pow(y, 2));
double currentG = (a/ SensorManager.STANDARD_GRAVITY);
Toast.makeText(this, "Calculating G's", Toast.LENGTH_LONG).show();
if (!mInitialized && currentG > 1.0) {
mLastX = x;
mLastY = y;
mLastZ = z;
mInitialized = true;
//Start Second Activity
Intent intent = new Intent(getBaseContext(), thirdClass.class);
intent.setAction(Intent.ACTION_VIEW);
intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
intent.setFlags(Intent.FLAG_ACTIVITY_REORDER_TO_FRONT);
getApplication().startActivity(intent);
}else {
float deltaX = Math.abs(mLastX - x);
float deltaY = Math.abs(mLastY - y);
float deltaZ = Math.abs(mLastZ - z);
if (deltaX < NOISE) deltaX = (float)0.0;
if (deltaY < NOISE) deltaY = (float)0.0;
if (deltaZ < NOISE) deltaZ = (float)0.0;
mLastX = x;
mLastY = y;
mLastZ = z;
}
}
@Override
public IBinder onBind(Intent intent) {
// TODO Auto-generated method stub
return null;
}
}
这没有给我任何错误,因此没有要显示的 logcat。