Как проверить, с какого onResume заходит пользователь - PullRequest
1 голос
/ 28 мая 2020

У меня проблема. На следующем рисунке показана моя проблема. Запускаем в приложении 1 и нажимаем кнопку. Теперь мы либо видим экран app2, либо экран настроек. Теперь, когда я нажимаю кнопку «Назад» (отмеченную красным кружком в приложении 2 и настройках), мы возвращаемся на экран приложения 1. Но я хочу знать, с какого экрана мы вернемся к экрану app1.

enter image description here

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

        // if(from setting) {
            // do this
           }

            NfcManager manager = (NfcManager) this.getSystemService(Context.NFC_SERVICE);
            NfcAdapter adapter = manager.getDefaultAdapter();
            if (adapter != null && adapter.isEnabled()) {
                   Intent userHomeScreen = new Intent(getApplicationContext(), UserHomeActivity.class);
                    startActivity(userHomeScreen);

            }
        }



protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_nfc_setting);

        NfcManager manager = (NfcManager) this.getSystemService(Context.NFC_SERVICE);
        NfcAdapter adapter = manager.getDefaultAdapter();
        if (adapter != null && adapter.isEnabled()) {
            FirebaseUser currentUser = FirebaseAuth.getInstance().getCurrentUser();
            if (currentUser != null){
                Intent userHomeScreen = new Intent(getApplicationContext(), UserHomeActivity.class);
                startActivity(userHomeScreen);
            }else{
                Intent loginScreen = new Intent(getApplicationContext(), LoginActivity.class);
                startActivity(loginScreen);
            }
        }
        else {
            btn_nfc_navigate_setting = findViewById(R.id.btn_nfc_navigate_setting);

            btn_nfc_navigate_setting.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View v) {
                    startActivity(new Intent(Settings.ACTION_NFC_SETTINGS));
                }
            });
        }

Ответы [ 3 ]

1 голос
/ 28 мая 2020

Послушайте, теперь я понимаю, что происходит, вам нужно startActivityForResult() не startActivity():

Теперь в действии, которое вы используете для открытия других действий:

Когда вы открываете экран входа в систему:

Intent loginScreen = new Intent(getApplicationContext(), LoginActivity.class);
int requestCode = 10;
startActivityForResult(loginScreen , requestCode);

Когда вы открываете настройки

btn_nfc_navigate_setting.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
int requestCode = 11;
startActivityForResult(new Intent(Settings.ACTION_NFC_SETTINGS) , requestCode);
}
});

Переопределите этот метод, чтобы слушать, откуда вы пришел вместо onResume()

@Override
public void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);

//this is triggered when you come back to this activity
if(requestCode == 10){

//we came from login


}else if(requestCode == 11){

//we came from settings

}


}
0 голосов
/ 28 мая 2020

Если вы хотите узнать результат Intent (в данном случае settings или app2), вы можете использовать

startActivityForResult(intent, requestCode)

вместо

startActivity(intent).

Где код запроса должен быть уникальным для разных целей (в данном случае settings и app2).

Чтобы обработать результат, вам нужно переопределить onActivityResult () в действии.

Таким образом, ваш требуемый код будет

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

    // if(from setting) {
        // do this
        // }

        NfcManager manager = (NfcManager) this.getSystemService(Context.NFC_SERVICE);
        NfcAdapter adapter = manager.getDefaultAdapter();
        if (adapter != null && adapter.isEnabled()) {
               Intent userHomeScreen = new Intent(getApplicationContext(), UserHomeActivity.class);
                startActivityForResult(userHomeScreen,1);

        }
    }

    @Override
    protected void onActivityResult(int requestCode, int resultCode, @Nullable Intent data) {
        super.onActivityResult(requestCode, resultCode, data);

        if (requestCode == 1) {
        //    Activity returned from userHomeScreen
        }
        else if (requestCode ==2) {
        //    Activity returned from Settings
        }
    }

ОБНОВЛЕНИЕ:

Чтобы добавить к этому выше, если вы хотите получить доступ к какой-либо ФУНКЦИИ настроек, вы можете использовать константы SETTINGS в качестве параметров намерения.

Документация по настройкам

Например, если вы хотите получить доступ к настройкам NF C:

// Look into the constants in the documentation to know which constants to use in intent
Intent intent = new Intent(Settings.ACTION_NFC_SETTINGS);
startActivityForResult(intent, 2);
0 голосов
/ 28 мая 2020

Использовать startActivityForResult()

Из приложения 1 в приложение 2 или настройки:

int FLAG_APP2 = 1
Intent i = new Intent(this, App2.class);
startActivityForResult(i, FLAG_APP2);

Затем в приложении 2 была нажата кнопка назад:

finish();

Затем в приложении 1 переопределить onActivityResult():

@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
    super.onActivityResult(requestCode, resultCode, data);

    if (requestCode == FLAG_APP2) {
        //here you know this is from App2 Screen
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...