2015-05-01 21 views
5

Realizzo un'app per Android che verifica se determinate funzionalità di sicurezza del telefono sono abilitate. Ad esempio, se si dispone di accesso tramite password abilitato o se i dati sono crittografati sul telefono.Eseguire Android App due volte per funzionare, perché?

Per qualche motivo, l'app deve essere eseguita due volte per testare e vedere se queste funzionalità di sicurezza sono abilitate sul telefono o meno, e questo è il problema che sto cercando di risolvere. Mi piacerebbe testare e vedere se le funzionalità di sicurezza sono abilitate quando l'app viene creata e la prima volta che viene eseguita l'app, non la seconda volta che viene eseguita.

Verificare se queste funzioni sono abilitate nella funzione onStart() nel file MainActivity. Ho incluso il codice di funzioni di seguito:

@Override 
    @TargetApi(Build.VERSION_CODES.JELLY_BEAN_MR1) 
    @SuppressLint("NewApi") 
    public void onStart() 
    { 
     super.onStart(); 

     //determine if phone uses lock pattern 
     //It returns 1 if pattern lock enabled and 0 if pin/password password enabled 
     ContentResolver cr = getBaseContext().getContentResolver(); 
     lockPatternEnable = Settings.Secure.getInt(cr, Settings.Secure.LOCK_PATTERN_ENABLED, 0);//Settings.System 


     //returns 1 if pin/password protected. 0 if not 
     KeyguardManager keyguardManager = (KeyguardManager) getBaseContext().getSystemService(Context.KEYGUARD_SERVICE); 
     if(keyguardManager.isKeyguardSecure()) 
     { 
      //it is pin or password protected 
      pinPasswordEnable=1; 
     } 
     else 
     { 
      //it is not pin or password protected 
      pinPasswordEnable=0; 
     }//http://stackoverflow.com/questions/6588969/device-password-in-android-is-existing-or-not/18716253#18716253 

     //determine if adb is enabled. works 
     adb=Settings.Global.getInt(cr, Settings.Global.ADB_ENABLED, 0); 

     //determine if bluetooth is enabled.works 
     bluetooth=Settings.Global.getInt(cr, Settings.Global.BLUETOOTH_ON, 0); 
     //Settings.System BLUETOOTH_DISCOVERABILITY 

     //determine if wifi is enabled. works 
     WifiManager wifi = (WifiManager)getSystemService(Context.WIFI_SERVICE); 
     if (wifi.isWifiEnabled()) 
     { 
      //wifi is enabled 
      wifiInt=1; 
     } 
     else 
      wifiInt=0; 

     //determine if data is encrypted 
     getDeviceEncryptionencryption(); 

     //determine if gps enabled 


    }//end of onStart() function 

Se uno qualsiasi codice più bisogno di essere inviato a rispondere a questa domanda, fammelo sapere, e grazie per il vostro aiuto. Forse il problema ha qualcosa a che fare con lo super.onStart();

Qualcuno pensa che una schermata di caricamento splash possa aiutare a risolvere il problema?

+0

Il mio primo pensiero è chiedere dove viene impostato getBaseContext. Se usi 'ApplicationContext' hai lo stesso problema? Cosa hai nella funzione del ciclo di vita 'onResume'? – Grambot

+0

Attualmente non ho una funzione 'onResume'. Solo 'onStart' e' onCreate'. Ho cambiato tutte le occorrenze di 'getBaseContext' con' ApplicationContext' e richiede ancora 2 esecuzioni per funzionare. – pHorseSpec

+0

Cosa succede la prima volta che viene eseguito? – nasch

risposta

1

super.onStart(); è ok. Lo schermo Splash non aiuta.

Dal tuo codice non vedo come determini quante volte ha funzionato. Hai anche menzionato il test: si tratta di test manuali o di qualsiasi framework? Forse il tuo framework ha un metodo init che viene eseguito prima di ogni esecuzione e rende questa chiamata extra per onStart().

I problemi non sono in questo codice. Usa debugger o logcat e scopri chi ti chiama due volte e, come aveva chiesto @nasch, cosa succede alla prima esecuzione.

Ancora, la vera domanda per aiutarti è ciò che vuoi dire "chiama due volte". È l'icona dell'app che si fa manualmente due volte o si tratta di un framework di test che chiama l'app due volte. Entrambi i casi sono chiari da risolvere.