Как узнать, что в ICS включено «Не выполнять действия»?

Как узнать в настройках «Не сохранять действия» опция включена в ics через код. Если он включен, как предотвратить активность.

Примечание. Я использовал больше действий в своем приложении. Из-за этих настроек, если я переношу одно действие на другое, первое действие уничтожается. Я могу сохранить свои данные в onSaveInstanceState. Без использования сохраненного состояния экземпляра есть ли способ сделать …

Заранее спасибо..

Этот флаг существует именно по этой причине. Идея состоит в том, чтобы проверить и убедиться, что ваше приложение уничтожает свои действия. Вы не можете переопределить его, потому что в реальном мире это может произойти даже без этого флага, если устройство остается низким в памяти. Вам нужно закодировать вещи, чтобы справиться с этим делом, но не переопределить его.

Импортировать следующий пакет

import android.provider.Settings; 

Затем вы можете проверить, включена ли опция с помощью этого кода:

 Settings.System.getInt(getContentResolver(),Settings.System.ALWAYS_FINISH_ACTIVITIES, 0); 

И вы можете изменить его, используя это:

 Settings.System.putInt(getContentResolver(),Settings.System.ALWAYS_FINISH_ACTIVITIES, 0); 

Надеюсь, поможет

  Settings.System.ALWAYS_FINISH_ACTIVITIES 

Теперь устарела, поэтому вы должны использовать

  Settings.Global.ALWAYS_FINISH_ACTIVITIES.equals("1") 

Проверить, включен ли этот параметр

Обновить:

Для обработки всех версий sdk я создал метод:

 public static boolean isFinishActivitiesOptionEnabled(Context context) { int result; if (Build.VERSION.SDK_INT < Build.VERSION_CODES.JELLY_BEAN_MR1) { result = Settings.System.getInt(context.getContentResolver(), Settings.Global.ALWAYS_FINISH_ACTIVITIES, 0); } else { result = Settings.Global.getInt(context.getContentResolver(), Settings.System.ALWAYS_FINISH_ACTIVITIES, 0); } return result == 1; } 

У допрашивающего есть право, и у него есть хороший вопрос, на который еще не ответили 🙂

Я проверил эту проблему с простым простым примером. Дело в том, что когда опция «не выполнять действия» проверяется, действия будут убиты. Например: Основная активность вызывает субактивность. Основная активность убита. При повторном нажатии на субактивность происходит перезапуск Mainactivity. Это может быть проблемой, когда mainactivity делает longrunning вещи, такие как загрузка содержимого.

Мой вывод об этом. Опция «не сохранять активность» является опцией разработчика и не должна устанавливаться при обычных условиях пользователя. Поэтому разработчик должен иметь возможность обнаруживать эту настройку.

Я согласен с @Kaediil в том, что приложения для Android должны работать хорошо, а опция «Не выполнять действия» проверяется.

Бу по какой-то причине, если вам нужно проверить значение «alwaysFinishActivities», вы можете использовать код ниже;

 /** * returns true if AlwaysFinishActivities option is enabled/checked */ private boolean isAlwaysFinishActivitiesOptionEnabled() { int alwaysFinishActivitiesInt = 0; if (Build.VERSION.SDK_INT >= 17) { alwaysFinishActivitiesInt = Settings.System.getInt(getApplicationContext().getContentResolver(), Settings.Global.ALWAYS_FINISH_ACTIVITIES, 0); } else { alwaysFinishActivitiesInt = Settings.System.getInt(getApplicationContext().getContentResolver(), Settings.System.ALWAYS_FINISH_ACTIVITIES, 0); } if (alwaysFinishActivitiesInt == 1) { return true; } else { return false; } } 

Если опция alwaysFinishActivities проверена, и вы хотите, чтобы она была снята;

Вы можете направить пользователя в «Настройки -> Параметры разработчика», чтобы снять это значение. (Это лучше, чем получить дополнительные страшные разрешения и установить это значение программно)

 /** * shows Settings -> Developer options screen */ private void showDeveloperOptionsScreen(){ Intent intent = new Intent(android.provider.Settings.ACTION_APPLICATION_DEVELOPMENT_SETTINGS); intent.setFlags(Intent.FLAG_ACTIVITY_NO_HISTORY); startActivity(intent); } 

Int value = Settings.System.getInt (getContentResolver (), Settings.System.ALWAYS_FINISH_ACTIVITIES, 0);

Вы также можете использовать намерение и убивать действие каждый раз. Просто позвоните в ReturnToMain в свой onBackPressed (), и он должен победить проблему «Не держать действия». Это была одна из проблем, с которыми я столкнулся за рубежом с иностранными телефонами.

 public void ReturnToMain() { Intent view_user = new Intent(PanicAddUpdate.this, PanicAddMain.class); view_user.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP | Intent.FLAG_ACTIVITY_NEW_TASK); startActivity(view_user); finish(); } 

Другим вариантом будет решение @ aegean ниже. Вам необходимо направить пользователя в «Настройки -> Параметры разработчика», чтобы снять это значение. Вот что я использовал с диалоговым окном. Обязательно добавьте финиш (), чтобы приложение не разбилось при нажатии кнопки «Назад» или не пыталось перезапустить приложение после нажатия кнопки «домой».

 public void showDeveloperOptionsScreen(){ new AlertDialog.Builder(this) .setTitle("Developer Options Detected!") .setMessage("In order for Sender to work properly, please uncheck the \"Don't keep activities\" option.") .setNegativeButton(android.R.string.no, null) .setPositiveButton(android.R.string.yes, new OnClickListener() { public void onClick(DialogInterface arg0, int arg1) { Intent intent = new Intent(android.provider.Settings.ACTION_APPLICATION_DEVELOPMENT_SETTINGS); intent.setFlags(Intent.FLAG_ACTIVITY_NO_HISTORY); startActivity(intent); finish(); } }).create().show(); }