IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Android Discussion :

Comment changer la date


Sujet :

Android

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre très actif
    Profil pro
    Inscrit en
    Octobre 2007
    Messages
    299
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2007
    Messages : 299
    Par défaut Comment changer la date
    Bonjour,

    J'aimerais lancer les commandes suivante qui fonctionnent dans l’émulateur d'Android Studio.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    generic_x86:/ $ su
    1|generic_x86:/ # date 070803002016.00                                              
    Fri Jul  8 03:00:00 CEST 2016
    Celles ci mofient bien la date du système. J'ai donc écrits ce code java :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    public class MainActivity extends AppCompatActivity {
     
     
        private void changeSystemTime() {
            try {
                Process process = Runtime.getRuntime().exec("su");
                DataOutputStream os = new DataOutputStream(process.getOutputStream());
                String command = "date 070805002016.00 \n";
                Log.e("command", command);
                os.writeBytes(command);
                os.flush();
                os.writeBytes("exit\n");
                os.flush();
                process.waitFor();
            } catch (InterruptedException e) {
                e.printStackTrace();
            } catch (IOException e) {
                e.printStackTrace();
            }
     
        }
    }
    Le make passe sans erreur mais bien que j'ai une interface layout vide de mon application celle ci ne change pas l'heure. J'ai pourtant ajouter la règle suivante dans le manifeste
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <permission android:name="android.permission.SET_TIME" />
    Merci de votre aide.

  2. #2
    Modérateur
    Avatar de grunk
    Homme Profil pro
    Lead dév - Architecte
    Inscrit en
    Août 2003
    Messages
    6 693
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : Lead dév - Architecte
    Secteur : Industrie

    Informations forums :
    Inscription : Août 2003
    Messages : 6 693
    Par défaut
    Réponse simple : tu ne peux pas.

    Réponse un peu plus détaillée :
    Comme tu peux le voir la commande que tu tape requiert les droits superutilisateur (su).

    D'autre part , nul besoin d'utiliser une ligne de commande puisque AlarmManager dispose du nécessaire avec setTime()

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    AlarmManager am = (AlarmManager) this.getSystemService(Context.ALARM_SERVICE);
    am.setTime(tempsenmillisecond);
    Il faut effectivement la permission SET_TIME mais les seules applications qui ont le droit de l'utiliser sont les application système et les applis signée avec l'image système (les applis constructeur).

    Donc la seule solution pour faire ce que tu veux est d'avoir un appareil rooté et que ton application requiert les droits root.

    Concrètement si ton application se destine à une large diffusion sur le playstore tu peux oublier tout de suite puisque la vaste majorité des utlisateurs n'on pas d'appareil rooté (et ca m'étonnerais pas que google refuse les appli nécessitant des permissions root)
    Pry Framework php5 | N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  3. #3
    Membre très actif
    Profil pro
    Inscrit en
    Octobre 2007
    Messages
    299
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2007
    Messages : 299
    Par défaut
    Bonjour et merci grunk

    Ce n'est pas une application destinée à Google PLAY. J'ai une android Box TV rootée qui ne garde pas l'heure lorsqu'on la débranche. J'aimerais faire un service qui garde l'heure et la restaure au démarrage. J'ai déjà un code qui garde l'heure dans un fichier reste à restaurer l'heure en la changeant.

    J'ai essayé ton code qui est devenu comme ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
     
    public class MainActivity extends AppCompatActivity {
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            //setContentView(R.layout.activity_main);
     
                    Calendar c = Calendar.getInstance();
                    c.set(2013, 8, 15, 12, 34, 56);
                    AlarmManager am = (AlarmManager) this.getSystemService(Context.ALARM_SERVICE);
                    am.setTime(c.getTimeInMillis());
     
                    // Now we display state in TextView
                    TextView txtView = new TextView(this);
                    txtView.setText("Done !!");
                    txtView.setGravity(Gravity.CENTER);
                    txtView.setTextSize(20);
                    setContentView(txtView);
     
            }
    }
    La ligne du manifeste n'a pas l'air de suffire. En allant sur d'autre site j'ai lu qu'il qui faut modifier le manifeste comme ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
     
    <application
            android:allowBackup="true"
            android:icon="@mipmap/ic_launcher"
            android:label="@string/app_name"
            android:roundIcon="@mipmap/ic_launcher_round"
            android:supportsRtl="true"
            android:theme="@style/AppTheme" >
            <activity android:name=".MainActivity" >
                <intent-filter>
                    <action android:name="android.intent.action.MAIN" />
     
                    <category android:name="android.intent.category.LAUNCHER" />
                </intent-filter>
            </activity>
            <permission android:name="android.permission.SET_TIME"
                android:protectionLevel="signature|system"
                android:label="@string/permlab_setTime"
                android:description="@string/permdesc_setTime" />
        </application>
    Cela génère des erreurs dans le code. mais la ligne seule comme ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <permission android:name="android.permission.SET_TIME" />
    Ne génère aucune erreur du make mais l'application crashe dans l'émulateur.

    Merci.

  4. #4
    Modérateur
    Avatar de grunk
    Homme Profil pro
    Lead dév - Architecte
    Inscrit en
    Août 2003
    Messages
    6 693
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : Lead dév - Architecte
    Secteur : Industrie

    Informations forums :
    Inscription : Août 2003
    Messages : 6 693
    Par défaut
    Ne génère aucune erreur du make
    Que veux tu dire par make ? La compilation de l'application ?

    mais l'application crashe dans l'émulateur.
    Il'ya donc un message d'erreur dans le logcat.

    Peros j'ai jamais eu à travailler avec les permissions root , donc je risque d'être un peu limité dans mes réponses
    Pry Framework php5 | N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  5. #5
    Membre très actif
    Profil pro
    Inscrit en
    Octobre 2007
    Messages
    299
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2007
    Messages : 299
    Par défaut
    Bonjour grunk,

    En parlant du make : oui je signifie compilation et génération de l'APK envoyé dans l'émulateur.

    Sans surprise dans le logcat, c'est bien une erreur dans le manifeste :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    08-22 09:11:20.151 2822-2822/org.acme.settimes E/AndroidRuntime: FATAL EXCEPTION: main
                                                                     Process: org.acme.settimes, PID: 2822
                                                                     java.lang.RuntimeException: Unable to start activity ComponentInfo{org.acme.settimes/org.acme.settimes.MainActivity}: java.lang.SecurityException: setTime: Neither user 10075 nor current process has android.permission.SET_TIME.
    Merci

  6. #6
    Modérateur
    Avatar de grunk
    Homme Profil pro
    Lead dév - Architecte
    Inscrit en
    Août 2003
    Messages
    6 693
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : Lead dév - Architecte
    Secteur : Industrie

    Informations forums :
    Inscription : Août 2003
    Messages : 6 693
    Par défaut
    Si tu l'execute sur l'émulateur c'est normal que ca ne marche pas puisque l'emulateur comme un appareil normal n'est pas rooté
    Pry Framework php5 | N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

Discussions similaires

  1. Comment changer la date d'un DTPicker automatiquement ?
    Par dmoluc dans le forum Macros et VBA Excel
    Réponses: 0
    Dernier message: 31/07/2012, 19h01
  2. Comment changer la date système sans changer l'heure?
    Par pointer dans le forum Langage
    Réponses: 7
    Dernier message: 18/05/2010, 09h55
  3. Comment changer le format de DATE dans Oracle
    Par khanfir dans le forum Oracle
    Réponses: 3
    Dernier message: 20/04/2010, 19h55
  4. Comment changer la date par programmation ?
    Par 21247692 dans le forum EDI
    Réponses: 1
    Dernier message: 21/04/2008, 18h40
  5. [CF][VB.Net] Comment changer la date système du PDA ?
    Par zitoun dans le forum Windows Mobile
    Réponses: 1
    Dernier message: 07/03/2006, 16h26

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo