Я рассуждаю так. Раз приложение свернули, значит активность больше нам не видна. И должен сработать метод
onStop. Но из активности можно выйти нажатием кнопки назад, и это тоже вызовет
onStop , надо это обработать. Также
onStop сработает, если мы запустим новую активность в нашем приложении или повернем устройство.
BaseActivity.javapublic class BaseActivity extends AppCompatActivity {
protected boolean isShowAlert = true;
private int oldOrientation;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
oldOrientation = getResources().getConfiguration().orientation;
}
@Override
protected void onPause() {
super.onPause();
int currentOrientation = getResources().getConfiguration().orientation;
if(currentOrientation != oldOrientation)
isShowAlert = false;
}
@Override
protected void onStart() {
super.onStart();
isShowAlert = true;
}
@Override
protected void onStop() {
super.onStop();
if (isShowAlert)
AppHideHandler();
}
@Override
public void onBackPressed() {
isShowAlert = false;
super.onBackPressed();
}
public void AppHideHandler() {
AlertDialog.Builder builder = new AlertDialog.Builder(getApplicationContext());
builder.setTitle("Сообщение")
.setMessage("Приложение свернули")
.setCancelable(true);
AlertDialog alert = builder.create();
alert.getWindow().setType(WindowManager.LayoutParams.TYPE_SYSTEM_ALERT);
alert.show();
}
}
За показ сообщения отвечает
isShowAlert. Не забываем ставить ему true в
onStart, т.к. при запуске новой активности это ключ будет установлен в false и при возврате обратно уже не позволит отслеживать сворачивание.
В
onPause сравниваем конфигурацию, если устройство повернули, значит показывать сообщение не нужно.
В
AndroidManifest.xml надо добавить:
<uses-permission android:name="android.permission.SYSTEM_ALERT_WINDOW"/>
Наследуемся от нашей базовой активности. И теперь по умолчанию при сворачивании будет показываться сообщение.
MainActivity.javapublic class MainActivity extends BaseActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
btn = (Button) findViewById(R.id.button);
btn.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
isShowAlert = false;
startActivity(new Intent(MainActivity.this, Main2Activity.class));
}
});
}
}
Также при запуске новой активности ставим ключ в
false, чтобы сообщение не показывалось.
В данной реализации сообщение будет показано, если вызвать список запущенных ранее приложений (долгий тап по кнопке Home).