2012-03-26 5 views
1

Haben Sie eine bessere Möglichkeit, das Gerät um 100% zu erwecken? Ich rufe wiederholt das acquire() an, aber ich bin mir nicht sicher, ob das richtig ist. Oder soll ich das acquire() nur einmal aufrufen? Oder sollte ich Intent.ACTION_SCREEN_OFF nutzen?Richtiger Weg zu 100% weckt mein Gerät?

public class MyServiceThatKeepsTheDeviceAwake extends IntentService { 
TAG = "com.android.browser.test.launcher.BrowsePageService"; 
... 
@Override 
public void onCreate() { 
    super.onCreate(); 
    mPowerManager = (PowerManager) getSystemService(Context.POWER_SERVICE); 
    mWakeLock = mPowerManager.newWakeLock(PowerManager.FULL_WAKE_LOCK |PowerManager.ACQUIRE_CAUSES_WAKEUP |PowerManager.ON_AFTER_RELEASE, TAG); 
} 

@Override 
public void onStart(Intent intent, int startId) { 
    super.onStart(intent, startId); 
    mWakeLock.acquire(); 
} 

// No release 

* Dieser Dienst wird ausgeführt unter Verwendung von Alarmmanager alle 20 Sekunden

--- Hinzugefügt:

* Das gibt mir die ff. Ausgabe, wenn es wiederholt ausgeführt wird. Sollte es ein Problem damit geben? Sollte es ein Problem geben, rufen Sie es wiederholt an?

C:\Windows\System32>adb shell dumpsys power 
Power Manager State: 
mIsPowered=false mPowerState=3 mScreenOffTime=463571 ms 
mPartialCount=9 
mWakeLockState=SCREEN_BRIGHT_BIT SCREEN_ON_BIT 
mUserState= 
mPowerState=SCREEN_BRIGHT_BIT SCREEN_ON_BIT 
mLocks.gather=SCREEN_BRIGHT_BIT SCREEN_ON_BIT 
mNextTimeout=355968 now=463589 -107s from now 
mDimScreen=true mStayOnConditions=0 
mScreenOffReason=0 mUserState=0 
mBroadcastQueue={-1,-1,-1} 
mBroadcastWhy={0,0,0} 
mPokey=0 mPokeAwakeonSet=false 
mKeyboardVisible=false mUserActivityAllowed=true 
mKeylightDelay=6000 mDimDelay=2000 mScreenOffDelay=7000 
mPreventScreenOn=false mScreenBrightnessOverride=-1 mButtonBrightnessOverride=-1 
mScreenOffTimeoutSetting=15000 mMaximumScreenOffTimeout=2147483647 
mLastScreenOnTime=19531 
mBroadcastWakeLock=UnsynchronizedWakeLock(mFlags=0x1 mCount=0 mHeld=false) 
mStayOnWhilePluggedInScreenDimLock=UnsynchronizedWakeLock(mFlags=0x6 mCount=0 mHeld=false) 
mStayOnWhilePluggedInPartialLock=UnsynchronizedWakeLock(mFlags=0x1 mCount=0 mHeld=false) 
mPreventScreenOnPartialLock=UnsynchronizedWakeLock(mFlags=0x1 mCount=0 mHeld=false) 
mProximityPartialLock=UnsynchronizedWakeLock(mFlags=0x1 mCount=0 mHeld=false) 
mProximityWakeLockCount=0 
mProximitySensorEnabled=false 
mProximitySensorActive=false 
mProximityPendingValue=-1 
mLastProximityEventTime=0 
mLightSensorEnabled=true 
mLightSensorValue=1219.0 mLightSensorPendingValue=1173.0 
mLightSensorPendingDecrease=true mLightSensorPendingIncrease=false 
mLightSensorScreenBrightness=122 mLightSensorButtonBrightness=0 mLightSensorKeyboardBrightness=0 
mUseSoftwareAutoBrightness=true 
mAutoBrightessEnabled=true 
mScreenBrightness: animating=false targetValue=122 curValue=122.0 delta=0.45 

mLocks.size=16: 
FULL_WAKE_LOCK     'com.android.browser.test.launcher.BrowsePageService'ACQUIRE_CAUSES_WAKEUP activated (minState=3, uid=10040, pid=722) 
FULL_WAKE_LOCK     'com.android.browser.test.launcher.BrowsePageService'ACQUIRE_CAUSES_WAKEUP activated (minState=3, uid=10040, pid=722) 
FULL_WAKE_LOCK     'com.android.browser.test.launcher.BrowsePageService'ACQUIRE_CAUSES_WAKEUP activated (minState=3, uid=10040, pid=722) 
FULL_WAKE_LOCK     'com.android.browser.test.launcher.BrowsePageService'ACQUIRE_CAUSES_WAKEUP activated (minState=3, uid=10040, pid=722) 
FULL_WAKE_LOCK     'com.android.browser.test.launcher.BrowsePageService'ACQUIRE_CAUSES_WAKEUP activated (minState=3, uid=10040, pid=722) 
FULL_WAKE_LOCK     'com.android.browser.test.launcher.BrowsePageService'ACQUIRE_CAUSES_WAKEUP activated (minState=3, uid=10040, pid=722) 
FULL_WAKE_LOCK     'com.android.browser.test.launcher.BrowsePageService'ACQUIRE_CAUSES_WAKEUP activated (minState=3, uid=10040, pid=722) 
PARTIAL_WAKE_LOCK    'WSBase.lastChance' activated (minState=0, uid=10007, pid=243) 
PARTIAL_WAKE_LOCK    'WSBase.lastChance' activated (minState=0, uid=10007, pid=243) 
PARTIAL_WAKE_LOCK    'WSBase.lastChance' activated (minState=0, uid=10007, pid=243) 
PARTIAL_WAKE_LOCK    'WSBase.lastChance' activated (minState=0, uid=10007, pid=243) 
PARTIAL_WAKE_LOCK    'WSBase.lastChance' activated (minState=0, uid=10007, pid=243) 
PARTIAL_WAKE_LOCK    'WSBase.lastChance' activated (minState=0, uid=10007, pid=243) 
PARTIAL_WAKE_LOCK    'WSBase.lastChance' activated (minState=0, uid=10007, pid=243) 
PARTIAL_WAKE_LOCK    'WSBase.lastChance' activated (minState=0, uid=10007, pid=243) 
PARTIAL_WAKE_LOCK    'WSBase' activated (minState=0, uid=10007, pid=243) 

mPokeLocks.size=0: 
+0

die beste Option ist, dass Sie es Sleep-Zeitlimit mit dem Wert „Never“ von Einstellungen festgelegt. aber Sie müssen es manuell für alle Geräte tun – Krish

+0

Motorola Xoom hat nicht "Nie" -Option oder nicht alle Geräte haben diese Option. Wie soll ich das tun? – quiel

+0

Dann sollten Sie diesen Wert auf maximale Zeit wie 1 Stunde oder mehr setzen – Krish

Antwort

1

Keine Notwendigkeit acquire() repeatedly.Just in onCreate() aufzurufen erwerben lock.It arbeiten, bis Sie nicht loslassen() aufrufen. Nur in onDestroy() Tätigkeits Rufauslösung(), wie es Batterieraubend Aufgabe.

Für weitere Details Blick auf diese Detail Discussion on Wake up of Screen

+0

Du meinst, ich sollte acquire() im onCreate einer Aktivität aufrufen, die den AlarmManager startet? Wenn das der Fall ist, wenn die Aktivität vom System zerstört wurde. Wird der Wakelock auch veröffentlicht? – quiel

+1

Wenn Aktivität im Vordergrund als es wird nie durch System zerstört.Im Hintergrund auch seine seltenen Fall, dass Aktivität zerstört wird.Aber wenn dann dann seine Methode ondestroyed() wird Sie aufrufen, es wird freizugeben() Sperre – Sameer

+0

@quiel: hast du meine Punkt? – Sameer