Как узнать, что в ICS включено "Не выполнять действия"?
Как узнать в настройках "Не сохранять действия" опция включена в ics через код. Если он включен, как предотвратить активность.
Примечание. Я использовал больше действий в своем приложении. Из-за этих параметров, если я переношу одно действие на другое, первое действие уничтожается. Я могу сохранить свои данные в onSaveInstanceState. Без использования сохраненного состояния экземпляра есть какой-нибудь способ сделать...
Спасибо заранее.
Ответы
Ответ 1
Этот флаг существует именно по этой причине. Идея состоит в том, чтобы проверить и убедиться, что ваше приложение разрушает свою деятельность. Вы не можете переопределить его, потому что в реальном мире это может произойти даже без этого флага, если устройство остается низким в памяти. Вам нужно закодировать вещи, чтобы обработать этот случай, не переопределяя его.
Ответ 2
импортируйте следующий пакет
import android.provider.Settings;
Затем вы можете проверить, разрешена ли опция с помощью этого кода:
Settings.System.getInt(getContentResolver(),Settings.System.ALWAYS_FINISH_ACTIVITIES, 0);
и вы можете изменить его, используя это:
Settings.System.putInt(getContentResolver(),Settings.System.ALWAYS_FINISH_ACTIVITIES, 0);
Надеюсь, что это поможет
Ответ 3
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;
}
Ответ 4
Я согласен с @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);
}
Ответ 5
Ответчик имеет право, и у него есть хороший вопрос, на который все еще не ответили: -)
Я протестировал эту проблему с помощью простого простого примера. Дело в том, что когда опция "не выполнять действия" проверяется, действия будут убиты. Например: Основная активность вызывает субактивность. Основная активность убита. Повторное нажатие на субактивность приводит к перезапуску Mainactivity. Это может быть проблемой, когда mainactivity делает многопользовательские вещи, такие как загрузка содержимого.
Мой вывод об этом. Опция "не сохранять активность" является опцией разработчика и не должна устанавливаться в обычных условиях пользователя. Поэтому разработчик должен иметь возможность обнаруживать этот параметр.
Ответ 6
int value = Settings.System.getInt(getContentResolver(), Settings.System.ALWAYS_FINISH_ACTIVITIES, 0);
Ответ 7
Вы также можете использовать намерение и каждый раз убивать действие. Просто позвоните в 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();
}