Как показывать специфическую Activity только в первом выполнении Приложения?

Случай состоит в том, что я хочу, чтобы, когда приложение будет работать впервые, он явился видом LicenseActivity что показал лицензию, и что, когда пользователь примет ее, начался MainActivity. После этого, что уже вновь не оказывается вышеупомянутым LicenseActivity.

4
задан 10.01.2017, 00:50
0 ответов

Ты можешь использовать предпочтения в Android, чтобы сохранять изменчивый флаг например и инициализировать ее в false, и в момент инициализирования первого onCreate возвращать эту переменную и видеть, в котором состояние находится, если он false, тогда наследства, которые должны называть LicenseActivity, и когда пользователь согласится менять ее в True, тогда следующий раз, который инициализирует App, уже не назовет эту активность, из-за которой Вашим состоянием будет True. Следовательно, он будет инициализироваться под MainActivity

//Declaramos bandera
SharedPreferences prefs = getSharedPreferences("MisPreferencias",Context.MODE_PRIVATE);
SharedPreferences.Editor editor = prefs.edit();
editor.putBoolean("bandera", false);
editor.commit();

Чтобы проверять, находится ли он в True или False

SharedPreferences prefs = getSharedPreferences("MisPreferencias",Context.MODE_PRIVATE);
Boolean bandActivity = prefs.getBoolean(bandera, false)
if (bandActivity){} 

//Мы меняемся в true после того, как пользователь согласился

SharedPreferences prefs = getSharedPreferences("MisPreferencias",Context.MODE_PRIVATE);
SharedPreferences.Editor editor = prefs.edit();
editor.putBoolean("bandera", true);
editor.commit();

Я оставляю тебе ссылку, где я нашел это решение для того, чтобы ты смог основываться больше. Привет shared preferences sgoliver.net

3
ответ дан 03.12.2019, 17:47

Ты можешь использовать предпочтение, чтобы сохранять, если твой LicenseActivity был показан:

Показав впервые твой Activity ты проверяешь, нужно показывать ли, и реализуешь Intent, чтобы показывать Activity, реализовав intent, спасаешь предпочтение со стоимостью, которую покажет Activity, он появился:

//Obtiene valor de preferencia (la primera ocasión es por default true).
boolean muestra = getValuePreference(getApplicationContext());

//Valida si muestra o no LicenseActivity.
if(muestra){ 
  Intent myIntent = new Intent(myActivity.this, LicenseActivity.class);
  startActivity(myIntent);
  saveValuePreference(getApplicationContext(), false);
}

Разыскиваемые методы были бы:

private String PREFS_KEY = "mispreferencias";

public void saveValuePreference(Context context, Boolean mostrar) {
    SharedPreferences settings = context.getSharedPreferences(PREFS_KEY, MODE_PRIVATE);
    SharedPreferences.Editor editor;
    editor = settings.edit();
    editor.putBoolean("license", mostrar);
    editor.commit();
}



public boolean getValuePreference(Context context) {
    SharedPreferences preferences = context.getSharedPreferences(PREFS_KEY, MODE_PRIVATE);
    return  preferences.getBoolean("license", true);
}
3
ответ дан 03.12.2019, 17:47

Со следующей функцией ты можешь знать, первый раз ли, который использует app (return 0), если уже она использованный раньше это (return 1), или если работает впервые trás обновление (return 2)

//Retorna: 0 primera vez / 1 no es primera vez / 2 nueva versión
public static int getFirstTimeRun(Context contexto) {
    SharedPreferences sp = contexto.getSharedPreferences("MYAPP", 0);
    int result, currentVersionCode = BuildConfig.VERSION_CODE;
    int lastVersionCode = sp.getInt("FIRSTTIMERUN", -1);
    if (lastVersionCode == -1) result = 0; else
        result = (lastVersionCode == currentVersionCode) ? 1 : 2;
    sp.edit().putInt("FIRSTTIMERUN", currentVersionCode).apply();
    return result;
}

однако, это может быть названным с splash, следующего способа

    switch(getFirstTimeRun(this)) {
        case 0:
            Log.d(TAG, "Es la primera vez!");
            // acá haces el intent a tu activity especial
            Intent intento= new Intent(SplashScreen.this, tuActivity.class);
            startActivity(intento);
            break;
        case 1:
            Log.d(TAG, "Ya has iniciado la app alguna vez");
            //
            break;
        case 2:
            Log.d(TAG, "Es una versión nueva");
            //
            break;
    }
2
ответ дан 03.12.2019, 17:47
  • 1
    Это возвращается в 0, если пользователь использует app чистоты, не así? –  10.01.2017, 17:49
  • 2
    просвет, так как он использует getSharedPreferences, равно как другие 2 ответов –  10.01.2017, 17:51
  • 3
    я попробовал использовать твою форму и он не следует мне, появляется у меня всегда впервые, я закрываю app и снова то же сообщение –  10.01.2017, 18:44
  • 4
    что extrañ или, я это использую без проблем, ú nica modificació n, который я сделал ему, состоит в том, что я называю ее с другой активности, но не, который может происходить в твоем случае –  10.01.2017, 19:49
  • 5
    Apareció что (lastVersionCode == currentVersionCode) всегда false –  10.01.2017, 20:11