2010-12-14 31 views

回答

3

它看起来是不可能放过取向传感器不断地努力了几个小时,即使该设备可能睡着(指http://code.google.com/p/android/issues/detail?id=3708#makechanges

只要显示熄灭时,传感器会做的一致好评.. 。:(

我现在实现的激活锁定(需要许可)

<uses-permission android:name="android.permission.WAKE_LOCK" /> 

在具有计时器,并且将恢复正常显示再次上的broadcastreciever一起使用。当然,这是疯狂的电池寿命,但我迄今没有找到其他方式。

这是我在服务onCreate方法:

@Override 
public void onCreate() { 
mNM = (NotificationManager) getSystemService(NOTIFICATION_SERVICE); 
CONTEXT = this; 
PowerManager pm = (PowerManager) CONTEXT.getSystemService(Context.POWER_SERVICE); 
this.mWakeLock = pm.newWakeLock(PowerManager.SCREEN_DIM_WAKE_LOCK | PowerManager.ACQUIRE_CAUSES_WAKEUP, "my tag"); 
mWakeLock.acquire(); 
Log.d(TAG, "Wakelock acquired"); 
// register receiver that handles screen on and screen off logic 
      IntentFilter filter = new IntentFilter(Intent.ACTION_SCREEN_ON); 
      filter.addAction(Intent.ACTION_SCREEN_OFF); 
      BroadcastReceiver mReceiver = new ScreenReceiver(); 
      registerReceiver(mReceiver, filter); 
} 

此服务的OnStart方法:

@Override 
public void onStart(Intent intent, int startid) { 
Toast.makeText(this, "My Service Started", Toast.LENGTH_SHORT).show(); 
Log.d(TAG, "onStart"); 
boolean screenOn = intent.getBooleanExtra("screen_state", false); 
      if (!screenOn) { 
       Log.d(TAG, "Screen is on"); 
      } else { 
      Log.d(TAG, "Screen is off"); 
     Timer timer = new Timer("DigitalClock"); 
    timer.schedule(new TimerTask() { 
     @Override 
     public void run() { 
     Log.d(TAG,"Waiting 1 sec for switching the screen back on again..."); 
    PowerManager pm = (PowerManager) getSystemService(Context.POWER_SERVICE); 
    mWakeLock = pm.newWakeLock(PowerManager.SCREEN_DIM_WAKE_LOCK | PowerManager.ACQUIRE_CAUSES_WAKEUP, 
     "my tag"); 
    mWakeLock.acquire(); 
     } 
    }, 1000); 
      mWakeLock.acquire(); 
       } 
} 

,这是广播接收器类:

public class ScreenReceiver extends BroadcastReceiver { 
    private boolean screenOff; 
    @Override 
    public void onReceive(Context context, Intent intent) { 
      if (intent.getAction().equals(Intent.ACTION_SCREEN_OFF)) { 
        screenOff = true; 
      } else if (intent.getAction().equals(Intent.ACTION_SCREEN_ON)) { 
        screenOff = false; 
      } 
      Intent i = new Intent(context, MyService.class); 
      i.putExtra("screen_state", screenOff); 
      context.startService(i); 
    } 

}

这种解决方法还可以通过USB从调试器插入UN设备(我首先遇到了问题)。

请让我知道你是否有更好的解决方案,或者如果2.3中有修复。感谢名单!

+0

它仍然是唯一的方法吗?我的意思是,有没有更好的方法来持续监测android传感器? – Demiurg 2012-02-17 20:53:54

1

以下是关于如何使用Android服务的教程的链接。 LINK 以下是指导如何从传感器读取数据的指南。 LINK