Запустите Android-приложение дважды, чтобы работать, почему?

Я делаю приложение для Android, которое проверяет, включены ли определенные функции безопасности на вашем телефоне. Например, если у вас включен вход с паролем или если ваши данные зашифрованы на вашем телефоне.

По какой-то причине приложение нужно запускать дважды, чтобы проверить, включены ли эти функции безопасности на телефоне или нет, и это проблема, которую я пытаюсь решить. Я хотел бы проверить и посмотреть, включены ли функции безопасности при создании приложения и при первом запуске приложения, а не при втором запуске.

Я проверяю, включены ли эти функции в функции onStart() в моем файле MainActivity. Я включил код функции ниже:

    @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

Если для ответа на этот вопрос необходимо опубликовать еще какой-либо код, просто дайте мне знать, и спасибо за вашу помощь. Возможно проблема как-то связана с super.onStart();

Кто-нибудь думает, что экран загрузки-заставки может помочь решить проблему?


person pHorseSpec    schedule 01.05.2015    source источник
comment
Моя первая мысль — спросить, где устанавливается getBaseContext. Если вы используете ApplicationContext, у вас есть такая же проблема? Что у вас есть в вашей функции жизненного цикла onResume?   -  person Grambot    schedule 01.05.2015
comment
В настоящее время у меня нет функции onResume. Только onStart и onCreate. Я заменил все вхождения getBaseContext на ApplicationContext, и для работы по-прежнему требуется 2 прогона.   -  person pHorseSpec    schedule 01.05.2015
comment
Что происходит при первом запуске?   -  person nasch    schedule 02.05.2015
comment
возможный дубликат Запустить приложение дважды для работы   -  person JonasCz    schedule 03.05.2015


Ответы (1)


супер.onStart(); Это хорошо. Заставка не поможет.

Из вашего кода я не вижу, как вы определяете, сколько раз он запускался. Вы также упоминаете тестирование — это ручное тестирование или вы используете какой-либо фреймворк? Возможно, в вашем фреймворке есть какой-то метод инициализации, который запускается перед каждым запуском и вызывает дополнительный вызов onStart().

Проблема не в этом коде. Используйте отладчик или logcat и выясните, кто звонит вам дважды и, как спросил @nasch, что происходит при первом запуске.

Тем не менее, реальный вопрос, чтобы помочь вам, остается - что вы подразумеваете под «позвонить дважды». Вы дважды щелкаете значок приложения вручную или какая-то среда тестирования дважды вызывает ваше приложение. Оба случая легко разрешимы.

person Alex    schedule 02.05.2015