Search code examples
androidsleepwake

Load app/activity when phone wakes up from sleep


I have an android activity, but when the phone goes to sleep(meaning I leave the phone there for a few seconds and then the screen goes black) and I turn it back on, the activity/app disappears(it's still active but i have to press the overview button to come back to the activity/app). How do I get it to come back automatically?

What I want to do is when the phone goes to sleep, when I turn it back on, the app/activity is there as it was when it went to sleep. I've checked up onResume, BroadcastReceivers, WakeLock, KeepScreenOn, Services, but I know I'm not doing it right.

OnResume doesn't work, WakeLock doesn't work, KeepScreenOn, just keeps the screen on and doesn't allow the phone to sleep, I haven't tried Services and BroadcastReceivers, but I thought I should ask here first.

Please help. Thanks.

I have MainActivity.java which opens initially and then starts AdminAddMerchantActivity.java. AdminAddMerchantActivity.java is a navigationView that starts 4 fragments including TimeFragment.java which has a tab layout, a view pager and a pager adapter. TimeFragment.java starts 5 fragments including PriceFragment.java. Below is the activities lifecycle methods below.

MainActivity.java:

...
@Override
    protected void onPause() {
        super.onPause();
        Log.d("state", "Pausing Main");
        // Handle countdown stop here
    }

    @Override
    protected void onResume() {
        super.onResume();

            Log.d("state", "Resuming Main");
        currentActivity = sharedPreferences.getString(CURRENT_ACT, "main");
        if(mAuth.getCurrentUser() != null)
        {
            if(currentActivity.equals("confirmFinalOrder"))
            {
                isResumed++;
                Intent intent = new Intent(MainActivity.this, ConfirmFinalOrderActivity.class);
                startActivity(intent);
                finish();
            }
            else if(currentActivity.equals("merchantDetails"))
            {
                isResumed++;
                Intent intent = new Intent(MainActivity.this, MerchantDetailsActivity.class);
                intent.putExtra("mid", sharedPreferences.getString("merchantid", ""));
                startActivity(intent);
                finish();
            }
            else if(currentActivity.equals("navigation")) {
                isResumed++;
                Intent intent = new Intent(MainActivity.this, NavigationActivity.class);
                fragment = sharedPreferences.getString("fragment", "Find Food");
                intent.putExtra("activity", fragment);
                startActivity(intent);
                finish();
            }
            else if(currentActivity.equals("adminaddnewmerchant"))
            {
                isResumed++;
                Intent intent = new Intent(MainActivity.this, AdminAddNewMerchantActivity.class);
                startActivity(intent);
                finish();
            }
            else if(currentActivity.equals("searchmerchants"))
            {
                isResumed++;
                Intent intent = new Intent(MainActivity.this, SearchMerchantsActivity.class);
                startActivity(intent);
                finish();
            }
            else if(currentActivity.equals("settingsuser"))
            {
                isResumed++;
                Intent intent = new Intent(MainActivity.this, SettingsActivity.class);
                startActivity(intent);
                finish();
            }
            else if(currentActivity.equals("settingsmerchant"))
            {
                isResumed++;
                Intent intent = new Intent(this, SettingsMerchantActivity.class);
                startActivity(intent);
                finish();
            }
            else if(currentActivity.equals("sellerregistration"))
            {
                isResumed++;
                Intent intent = new Intent(MainActivity.this, SellerRegistrationActivity.class);
                startActivity(intent);
                finish();
            }
        }
        else{
            if(currentActivity.equals("sellerregistration"))
            {
                isResumed++;
                Intent intent = new Intent(MainActivity.this, SellerRegistrationActivity.class);
                startActivity(intent);
                finish();
            }
            else if(!sharedPreferences.getString("current activity", "main").equals("login user")
                    && !sharedPreferences.getString("current activity", "main").equals("login merchant"))
            {
                currentActivity = "main";

                SharedPreferences.Editor editor = sharedPreferences.edit();
                editor.clear();
                editor.putString(CURRENT_ACT,currentActivity);
                editor.commit();


                Paper.book().write(Prevalent.RememberMeMerchant, "false");
                Paper.book().write(Prevalent.emailKey, "UserEmail");
                Paper.book().write(Prevalent.passwordKey, "UserPassword");
            }
        }

        // Handle countdown start here
    }

    @Override
    protected void onStop() {
        super.onStop();
        Log.d("state","Stopping Main");
    }

    @Override
    protected void onDestroy() {
        super.onDestroy();
        Log.d("state", "Destroyed Main");
    }

    @Override
    protected void onRestart() {
        super.onRestart();
        Log.d("state", "Restarted Main");

    }

    @Override
    protected void onStart() {
        super.onStart();
        Log.d("state", "Started Main");

    }

    @Override
    protected void onRestoreInstanceState(@NonNull Bundle savedInstanceState) {
        super.onRestoreInstanceState(savedInstanceState);
        Log.d("state", "onRestoreInstanceState Main");
    }

    @Override
    protected void onSaveInstanceState(@NonNull Bundle outState) {
        super.onSaveInstanceState(outState);
        Log.d("state", "onSaveInstanceState Main");
    }
//if the user

    @Override
    public void onBackPressed() {
        Log.d("state", "back login");

        currentActivity = "main";

        SharedPreferences.Editor editor = sharedPreferences.edit();
        editor.putString(CURRENT_ACT,currentActivity);
        editor.commit();
    }
...

AdminAddNewMerchantActivity.java:

...
@Override
    public void onBackPressed()
    {
        if(drawer.isDrawerOpen(GravityCompat.START))
        {
            drawer.closeDrawer(GravityCompat.START);
        }
        else{
            super.onBackPressed();
        }
    }
@Override
    public void onResume() {
        super.onResume();  // Always call the superclass method first

        // Get the Camera instance as the activity achieves full user focus
        //if (mCamera == null) {
            //initializeCamera(); // Local method to handle camera init
        //}
    }
...

PriceFragment.java:

...
@Override
    public void onDestroy() {
        super.onDestroy();
        SharedPreferences.Editor editor = sharedPreferences.edit();
        editor.putInt("scrollPrice", scrollView.getScrollY());
        editor.commit();
    }

    @Override
    public void onResume() {
        Log.d("onResume", "Resumed");
        super.onResume();

    }
...

TimeFragment.java:

...
@Override
    public void onResume() {
        super.onResume();



    }
...

Solution

  • The default Android behavior should do this automatically...

    Are you doing something special on the onPause or onStop methods?

    And if you're not, can you create a new project via Android Studio and test to see if this behavior persists on the new app?