0
嗨,這裏有一個有趣的問題!屏幕是黑色時讀取傳感器
我有這樣的服務:
public class SensorService extends Service implements SensorEventListener {
private static final String TAG = "MyService";
private MyServiceBinder myServiceBinder = new MyServiceBinder();
private SensorManager mSensorManager;
...........
private PowerManager.WakeLock wl;
private Handler mPeriodicEventHandler; //Per interrompere la trasformata a tempo
private int PERIODIC_EVENT_TIMEOUT = 5000;
private int x=0,mediacount=0;
@Override
public IBinder onBind(Intent intent) {
return myServiceBinder; // object of the class that implements Service interface.
}
public class MyServiceBinder extends Binder implements IMyService {
public void set(String tr, int cp, int sd) {
......
}
}
@Override
public void onCreate() {
Log.d(TAG, "onCreate");
// Get the Wake Lock
PowerManager pm = (PowerManager)getSystemService(Context.POWER_SERVICE);
wl = pm.newWakeLock(
PowerManager.PARTIAL_WAKE_LOCK,
"wlTag");
wl.acquire();
// Get the SensorManager
mSensorManager= (SensorManager) getSystemService(SENSOR_SERVICE);
mSensorManager.registerListener(this,
mSensorManager.getSensorList(Sensor.TYPE_ACCELEROMETER).get(0),
sDelay);
recc = new recClass(this);
recc.open();
// To execute every PERIODIC_EVENT_TIMEOUT seconds
mPeriodicEventHandler = new Handler();
mPeriodicEventHandler.postDelayed(doPeriodicTask, PERIODIC_EVENT_TIMEOUT);
}
@Override
public void onDestroy() {
Log.d(TAG, "onDestroy");
mIsStarted = false;
mPeriodicEventHandler.removeCallbacks(doPeriodicTask);
recc.close();
wl.release();
}
@Override
public void onSensorChanged(SensorEvent event) { // SensorEventListener
Sensor sens = event.sensor;
if ((sens.getType() == Sensor.TYPE_ACCELEROMETER) && mIsStarted){
fft.add((float)Math.sqrt((event.values[0]*event.values[0])+(event.values[1]*event.values[1])+(event.values[2]*event.values[2]))); // Add value to the fft
dataBuffer = fft.calculate();
if (dataBuffer != null){
for (int i=0; i<(fft.camp/2);i++)
recc.addValue(toRec, dataBuffer[i]);
x++;
Toast.makeText(this, "FFT: "+x, Toast.LENGTH_SHORT).show();
mIsStarted = false;
// mIsStarted will be true again after PERIODIC_EVENT_TIMEOUT milliseconds
mPeriodicEventHandler.postDelayed(doPeriodicTask, PERIODIC_EVENT_TIMEOUT);
}
}
}
@Override
public void onAccuracyChanged(Sensor sensor, int accuracy) {
}
private Runnable doPeriodicTask = new Runnable()
{
public void run()
{
mIsStarted = true;
}
};
}
怎麼可以看到,我收到了PARTIAL_WAKE_LOCK,我採取的是由x變量多少FFT改造中做計數。
所以開始服務後,我把黑色的屏幕按下紅色的電話按鈕,過了一會兒,我試着看看它做了多少個FFT,但是x的最後一個值與我變黑時的相同屏幕。
經過一些實驗後,我發現如果我嘗試PARTIAL_WAKE_LOCK,而沒有從onSensorChanged方法傳遞它運行良好,但它似乎是當屏幕變黑時,除傳感器偵聽器外,繼續運行。我該如何修復?
TNKS
瓦萊里奧