0

これは、デバイスがスリープ モードになった後にデバイスを再びオンにするための Wake Lock を実装する正しい方法なのだろうかと単純に思っています。デバイスが再びオンになると、その時点からインテントが起動されます。本当に、意図が起こるのに十分な長さで画面を表示したいだけです。ポインタがうまくいかない場合、私はこれを正しく行っていますか!

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;
private PowerManager.WakeLock wl;

/** Called when the activity is first created. */
public void onCreate() {
    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();
}

@Override
public int onStartCommand(Intent intent, int flags, int startId) {
    return START_STICKY;
}

@Override
public void onAccuracyChanged(Sensor arg0, int arg1) {
    // TODO Auto-generated method stub

}

@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);
    if (!mInitialized && currentG > 0.5) {
        AlertDialog alert = new AlertDialog.Builder(GMeter.this).create();
        alert.setTitle("-=Warning=-");
        alert.setMessage("Incoming Game!");
        alert.show();
        PowerManager pm = (PowerManager) getSystemService(Context.POWER_SERVICE);
        wl = pm.newWakeLock(PowerManager.ACQUIRE_CAUSES_WAKEUP + PowerManager.FULL_WAKE_LOCK, "myTag");
        wl.acquire();
        wl.release();
        mLastX = x;
        mLastY = y;
        mLastZ = z;
        mInitialized = true;
        // Start Second Activity
        Intent intent = new Intent(GMeter.this, nextClass.class);
        intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
        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;
}

}

4

1 に答える 1

0

いいえ、ウェイクロックはデバイスがスリープ状態になるのを防ぐために使用されます。AlarmManager 機能を使用してデバイスを起動し、インテントを送信する必要があると思います (パラメーターを使用RTC_WAKEUP)。

編集:onCreate()サービスのメソッドで機能が必要な場合は、PARTIAL_WAKE_LOCK を取得し、でリリースする必要がありますonDestroy()。したがって、サービスは通知を受け取ります。または、n 秒ごとにデバイスを起動してセンサーをチェックすることもできます。

于 2012-09-28T20:52:18.273 に答える