2015-01-30 20 views
12

Sto cercando di abilitare e/o disabilitare la modalità "Risparmio batteria" integrata di Android a livello di programmazione.Abilita/disabilita a livello di programmazione modalità "Risparmio batteria"

Qualsiasi approccio ufficiale, o inganno, sono i benvenuti.

Per riferimento, ecco come farlo seguendo standard di interfaccia utente di Android in 5.0: http://www.androidcentral.com/android-50-lollipop-basics-how-get-more-life-between-charges-battery-saver

Sono consapevole del fatto che si può detect esso - che non è quello che sono dopo.

Grazie a tutti.

+0

Non è possibile attivare la modalità di risparmio della batteria a livello di programmazione. Causa violazioni della sicurezza. Solo l'utente del telefono può cambiare la modalità. Le applicazioni non possono cambiare la modalità di risparmio della batteria – mertyildiran

+1

Grazie @MehmetMertYidiran. Per ulteriori informazioni, avete ulteriori informazioni/collegamenti su come o quali "violazioni della sicurezza" potrebbero essere causati da questo? –

+1

"violazioni della sicurezza": voglio dire, pensa a quello scenario sono l'utente del telefono e sto giocando al mio telefono. La tua applicazione è in esecuzione in background e poi improvvisamente cambia il mio telefono in modalità risparmio energetico. Tutto in una volta, le mie prestazioni diminuiranno, il mio display si scurirà e forse anche le mie app si bloccheranno. A causa di ciò, ciò significa che un grande rischio per gli utenti e Android non consente di cambiare la modalità di risparmio della batteria a livello di programmazione. – mertyildiran

risposta

13

È possibile abilitare/disabilitare Risparmio batteria in modo programmatico su dispositivi con root. È necessario modificare il valore low_power nella tabella global, nel file /data/data/com.android.providers.settings/databases/settings.db.

Se il dispositivo supporta settings di comando, è possibile eseguire (come root):

settings put global low_power 1 

per consentire Energy Saver e

settings put global low_power 0 

per disattivarlo. In caso contrario, utilizzare sqlite3 comando:

sqlite3 /data/data/com.android.providers.settings/databases/settings.db "update global set value='1' where name='low_power';" 
sqlite3 /data/data/com.android.providers.settings/databases/settings.db "update global set value='0' where name='low_power';" 

Ricordate che è necessario scollegare il telefono dal PC prima, altrimenti il ​​sistema consente di disattivare Energy Saver. Usa ADB su WiFi o Terminale Android (Emulatore).

UPDATE:

Il metodo sqlite3 non sembra essere più affidabile.

Non sono sicuro che la trasmissione android.os.action.POWER_SAVE_MODE_CHANGED venga inviata. Forse è necessario inviare manualmente, come nel codice here:

private static String COMMAND_ENABLE = "settings put global low_power 1\n" + "am broadcast -a android.os.action.POWER_SAVE_MODE_CHANGED --ez mode true\n"; private static String COMMAND_DISABLE = "settings put global low_power 0\n" + "am broadcast -a android.os.action.POWER_SAVE_MODE_CHANGED --ez mode false\n";

Inoltre, è stato segnalato che una nuova voce power_saving apparso nel database delle impostazioni, ma in Android 6.0.1 non sono riuscito a Trovalo. In Android 7.1.1_r13 low_power è ancora utilizzato internamente (ad esempio here), tuttavia potrebbe essere modificato in alcune versioni di Android. Potresti voler continuare a controllare le modifiche in f.e. this e this file.

+0

Come posso modificare il valore low_power nella tabella globale, nel file /data/data/com.android.providers.settings/databases/settings.db? Avete il codice per questo? Inoltre, questa risposta è ancora pertinente? – Rosenpin

+1

@Rosenpin Ho appena controllato su Android 6.0.1 ancora funzionante. Per il codice Java per eseguire i comandi della shell di Linux su Android, consultare f.e. http://stackoverflow.com/a/9194787/5108318 – pzmarzly

+0

Fantastico! Grazie. – Rosenpin

1

Non è possibile senza fare il rooting del telefono. Non sono sicuro del motivo per cui questo è il caso, in particolare quando sono necessari ora i servizi di localizzazione per visualizzare i risultati della scansione da SdkVersion 23+.

Questo numero è molto rivelatore. https://code.google.com/p/android/issues/detail?id=185370

La risposta migliore è gli sviluppatori di applicazioni sono costretti a rete posizione di origine folla per i loro padroni google. Si noti che il sistema operativo stesso non ha problemi a visualizzare i risultati della scansione senza servizi di localizzazione.

Rivelare che non c'è modo di attivare i servizi di localizzazione senza GPS dove i servizi di localizzazione sono inattivi. Questa riproduzione in due passaggi è un importante problema di qualità per gli utenti. Attiva i servizi di localizzazione, quindi disattiva il GPS.

Guarda questo spazio, più blocchi verso il basso.

Problemi correlati