Подтвердить что ты не робот

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

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

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

Спасибо заранее.

4b9b3361

Ответ 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();
}