Impostazione del tempo di sistema del telefono ROOTED

Attualmente sto cercando di impostare il tempo di sistema Android nel software. Sì, so che molte persone hanno provato – e fallito come me adesso. 🙂

Ma so anche che è ansible impostare il tempo di sistema Android sui telefoni ROOTED. Ho testet un'applicazione denominata ClockSync che lo esplicita.

  • Come escludere le dependencies transitive di altri sottoprogetti in build multiproject?
  • OR generico invece di AND <T estende il numero | CharSequence>
  • Come finire () un'attività quando si preme il button Home
  • Rimozione di frammenti da FragmentStatePagerAdapter
  • Una vista MATCH_PARENT all'interno di una vista WRAP_CONTENT
  • C'è un modo per interrogare un tipo specifico di applicazioni compatibili con il filter Intent?
  • Quindi quello che voglio è scoprire come impostare il tempo di sistema sui dispositivi ROOTED. Per favore non dica che non sia ansible. 🙂

    Quello che ho provato finora è impostare le seguenti autorizzazioni:

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

    E poi nel mio codice:

     AlarmManager a = (AlarmManager)getSystemService(Context.ALARM_SERVICE); long current_time_millies = System.currentTimeMillis(); try { a.setTime((long)current_time_millies+10000); } catch (Exception e) { // Why is this exception thrown? } 

    Ma ho sempre la seguente exception:

    java.lang.SecurityException: setTime: Né l'utente 10054 né il process corrente hanno android.permission.SET_TIME.

    Lo sto testando sullo stesso dispositivo in cui ClockSync funziona perfettamente. Quindi – cosa faccio male? O meglio: puoi fornire un codice testato che funziona?

    2 Solutions collect form web for “Impostazione del tempo di sistema del telefono ROOTED”

    Prima di tutto, sono lo sviluppatore di ClockSync e so qualcosa su come impostare tempo su Android.

    Temo che la risposta fornita da Violet Giraffe non sia corretta. Il problema è che l'applicazione utente normale non può accedere all'authorization SET_TIME . Questa authorization può essere utilizzata solo da applicazioni di sistema installate come parte della ROM o sono firmate con la stessa chiave della stessa ROM (dipende dal fornitore). Una delle applicazioni che utilizza questo approccio è NTPc . È firmato con la chiave AOSP e può essere installato nelle ROM Android AOSP, come CyanogenMod. Si noti che Google ha recentemente bandito chiavi AOSP dal Market e l'autore non potrà mai aggiornare la sua applicazione. NTPc non può essere installato su ROM normali utilizzati per la maggior parte dei telefoni.

    Se hai bisogno dei dettagli, assicurati di leggere i commenti per il famoso problema 4581 : Consenti alle applicazioni utente di impostare l'ora del sistema . Tieni presente che il problema è stato rifiutato da Google con il seguente commento:

    Ciao, è progettato che le applicazioni non possono modificare il tempo. Ci sono molti aspetti sottili della sicurezza che possono contare sull'ora corrente, come la scadenza del certificato, la gestione delle licenze, ecc. Non vogliamo permettere alle applicazioni di terze parti di distruggere globalmente il sistema in questo modo.


    Come impostare il tempo su un dispositivo radicato:

    Quello che ClockSync fa per impostare il tempo sta cambiando l'authorization del dispositivo /dev/alarm . In sostanza, esegue chmod 666 /dev/alarm nella shell root. Una volta che questo dispositivo dispone di autorizzazioni di scrittura per tutti gli utenti, SystemClock. la chiamata setCurrentTimeMillis (…) avrà successo. Alcune applicazioni utilizzano un altro approccio, eseguono il command di date nella shell di origine con argomenti appropriati, tuttavia è errato e less esatto perché la shell e l'esecuzione dei comandi superuser possono richiedere diversi secondi. Un esempio di tale applicazione è Sytrant .

    Per impostazione predefinita ClockSync imposta 666 l'authorization solo se /dev/alarm non è già ansible scrivere. Ciò consente di risparmiare CPU / batteria perché l'esecuzione su / Superuser.apk è relativamente costosa. Se si preoccupa della protezione, esiste un'opzione Permessi di ripristino che renderà autorizzato il dispositivo di allarme 664 dopo l'impostazione del tempo.

    Per facilitare l'accesso alla shell di root dall'applicazione sto utilizzando la mia class di helper: ShellInterface . Un'altra opzione è quella di utilizzare la libreria RootTools .

    Ecco il codice di esempio basato sulla class ShellInterface :

      public void setTime(long time) { if (ShellInterface.isSuAvailable()) { ShellInterface.runCommand("chmod 666 /dev/alarm"); SystemClock.setCurrentTimeMillis(time); ShellInterface.runCommand("chmod 664 /dev/alarm"); } } 

    Sentitevi liberi di controllare altri problemi relativi all'orario di installazione di Android:

    • Numero 12497: capacità per le applicazioni di get il permesso di impostare il tempo
    • Numero 18681: implementa timesync da NTP
    • Numero 67: Impostazione automatica della data e dell'ora utilizzando SIM o NTP

    Se hai bisogno di un tempo preciso nell'applicazione senza utilizzare root e cambiare il tempo di sistema, puoi avere i tuoi timer, ad esempio basato su Joda Time . È ansible get il tempo dai server NTP utilizzando il client NTP della libreria Apache commons-net .

    è ansible impostare il sistema Data e ora sul dispositivo radicato come questo

     public void setDate() { try { Process process = Runtime.getRuntime().exec("su"); DataOutputStream os = new DataOutputStream(process.getOutputStream()); os.writeBytes("date -s 20120419.024012; \n"); } catch (Exception e) { Log.d(TAG,"error=="+e.toString()); e.printStackTrace(); } } 
    L'Android è un fan Android di Google, tutto su telefoni Android, Android Wear, Android Dev e applicazioni Android Games e così via.