运行Android应用程序两次工作,为什么?

pHo*_*pec 5 java android onstart super oncreate

我正在制作一个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
Run Code Online (Sandbox Code Playgroud)

如果需要发布更多代码来回答这个问题,请告诉我,谢谢你的帮助.也许问题与这个问题有关super.onStart();

有人认为启动加载屏幕可能有助于解决问题吗?

Ale*_*lex 1

super.onStart(); 很好。启动画面没有帮助。

从您的代码中我看不出您如何确定它运行了多少次。您还提到了测试 - 是手动测试还是使用任何框架?也许您的框架有一些在每次运行之前运行的 init 方法,并且它对 onStart() 进行了额外的调用。

问题不在这段代码中。使用调试器或 logcat 并找出谁给您调用了两次,并且正如 @nasch 所问的那样,第一次运行时会发生什么。

尽管如此,真正可以帮助您的问题仍然存在 - “打电话两次”是什么意思。是您手动单击应用程序图标两次还是某些测试框架调用您的应用程序两次。这两种情况都清楚地需要解决。