0

Я хочу создать мероприятие, в котором у меня есть кнопка с заголовком «Не показывать экран снова в будущем», при нажатии, которое заставка забрасывается, независимо от того, сколько раз пользователь открывает приложение.
Я пробовал использовать общие настройки Android (см. Ответ на другие вопросы), но я не получаю желаемый результат. Я привел ниже код, который я использовал. Пожалуйста, дайте мне знать, каким образом код должен быть исправлен. Если есть какие-то другие средства, я с удовольствием узнаю об этом. Спасибо заранее.Отображение экрана всплеска только один раз по желанию пользователя

private class MyThread extends Thread 
    { 
     public boolean bRun = true; 

     @Override 
     public void run() 
     { 
      try 
      { 
       sleep(10000); 
       if (bRun) 
       { 
        startActivity(new Intent(getApplicationContext(), PnbActivity.class)); 

       } 
      } 
      catch (InterruptedException e) 
      { 
       e.printStackTrace(); 
      } 
     } 
    } 
public class Preference { 

     private SharedPreferences sharedPreferences; 
     private SharedPreferences.Editor editor; 

     public Preference(Context context) { 
      sharedPreferences = PreferenceManager.getDefaultSharedPreferences(context); 
     } 

     public void writePreference(String key, Object value) { 
      if(value instanceof Boolean) { 
       editor = sharedPreferences.edit(); 
       editor.putBoolean(key, (Boolean) value); 
       editor.commit(); 

      } 
     } 

     public Object readPreference(String key , Object defValue) { 

      if(defValue instanceof Boolean) 
       return sharedPreferences.getBoolean(key, (Boolean) defValue); 
      else 
       return null; 
     } 

     public Boolean getDisableSplash() { 
      return (Boolean) readPreference("disable", false); 
     } 

     public void disableSplash(Boolean value) { 

      Object valve = null; 
      writePreference("disable", valve); 
     } 

    } 


protected void onCreate(Bundle savedInstanceState) { 

super.onCreate(savedInstanceState); 
setContentView(R.layout.activity_note); 


Preference preference = new Preference(Note.this); 
Boolean result = preference.getDisableSplash(); 

if(!result) { 
    // dissable you splash activity here and move to next one 
} 
thread = new MyThread(); 
thread.start();}}  
public void skipAct(View v){ 
Preference preference = new Preference(Note.this); 
preference.disableSplash(true); 
    Intent i = new Intent(Note.this, PnbActivity.class); 
    startActivity(i); 

} 
+0

в экранной заставке деятельности установить 'общей preferance' переменной ** щелкнула ** и ** unclicked **, затем установите общее значение привилегии как ** щелкнув ** на 'click click event'. то каждый раз проверяйте значение общего предпочтения, если он проверяет действие запуска и переходит к 'main activity', а call finish else продолжает продолжать выполнение splashcreen. – sud

+0

теперь проверяем отредактированный отредактированный код – sud

ответ

0

нет необходимости для создания потока, непосредственно перед началом экрана-заставки в вашем всплеске проверке экрана деятельности совместно прив значение как-

public class Splash extends Activity { 

/** Duration of wait **/ 
private final int SPLASH_DISPLAY_LENGTH = 3000; 

/** Called when the activity is first created. */ 
@Override 
public void onCreate(Bundle icicle) { 
    super.onCreate(icicle); 
    setContentView(R.layout.splashscreen); 

Button button = (Button) findViewById(R.id.button1); 

     button.setOnClickListener(new OnClickListener() { 

     @Override 

     public void onClick(View view) { 

    SharedPreferences.Editor editor = getSharedPreferences(MY_PREFS_NAME, MODE_PRIVATE).edit(); 
    editor.putString("status", "clicked"); 
    editor.commit(); 

     } 
    }); 

    SharedPreferences prefs = getSharedPreferences(MY_PREFS_NAME, MODE_PRIVATE); 

String name = prefs.getString("status", "NotClicked"); 


if(name.equals("clicked"){ 
      /* Create an Intent that will start the Menu-Activity. */ 
      Intent mainIntent = new Intent(Splash.this,pnbActivity.class); 
      Splash.this.startActivity(mainIntent); 
      Splash.this.finish(); 
      } 
    /* New Handler to start the Menu-Activity 
    * and close this Splash-Screen after some seconds.*/ 
    new Handler().postDelayed(new Runnable(){ 
     @Override 
     public void run() { 

      /* Create an Intent that will start the Menu-Activity. */ 
      Intent mainIntent = new Intent(Splash.this,pnbActivity.class); 
      Splash.this.startActivity(mainIntent); 
      Splash.this.finish(); 

     } 
    }, SPLASH_DISPLAY_LENGTH); 
    } 
    } 
+0

Заставка не должна выполняться, если пользователь нажимает кнопку один раз независимо от того, сколько раз приложение запускается. Будет ли код, который вы написали, достигнуть этого? – Pra

+0

. ценность в общих привилегиях сохраняется до тех пор, пока вы их не очистите. независимо от того, сколько раз вы закрывали или открывали приложение. – sud

+0

Sud Я попробовал то, что вы сказали. Но я не могу разрешить ошибку. Не могли бы вы поместить весь код? – Pra

0

попытаться изменить ваш код, как показано ниже:

... 
if(!result) { 
thread = new MyThread(); 
thread.start();}}  
Preference preference = new Preference(Note.this); 
preference.disableSplash(true); 
Intent i = new Intent(Note.this, PnbActivity.class); 
startActivity(i); 
} 
else 
//else if(result) 
{ 

Intent i = new Intent(Note.this, PnbActivity.class); 
startActivity(i); 
} 
... 

Также проверьте How do I make a splash screen load once?

ПРИМЕЧАНИЕ: - Ясно preference во время сеанса пользователя рядом снова получить SplshScreen. надеюсь, что это сработает.