2013-05-13 2 views
4

Мое приложение запускает экран заставки с музыкой, я использовал sharedpreference, чтобы остановить музыку, поэтому в следующий раз, когда вы открываете экран заставки приложения, все еще там без музыки.sharedpreference с заставкой

им пытаются получить экран настроек с тремя независимыми различными функциями проверил коробки, а также, если вы проверить один checkedbox вы не можете проверить другие два, как показано ниже:

Первый checkedbox: начать приложение с экрана заставки и музыка (достигается ниже кода),

Второй checkedbox: начать приложение с заставкой и без музыки (достигается ниже кода),

third checkbox: начать приложение без заставки и музыки (не достигнуто).

любая помощь будет признателен, спасибо

код:

Всплеск:

public class Splash extends Activity{ 
    MediaPlayer ourSong; 
@Override 
protected void onCreate(Bundle savedInstanceState) { 
    this.requestWindowFeature(Window.FEATURE_NO_TITLE); 
    // TODO Auto-generated method stub 
    super.onCreate(savedInstanceState); 
     setContentView(R.layout.splash); 

    ourSong = MediaPlayer.create(Splash.this, R.raw.splashsound); 

    SharedPreferences getPrefs = PreferenceManager.getDefaultSharedPreferences 
       (getBaseContext()); 
    boolean music = getPrefs.getBoolean("checkbox", true); 
    if (music == true)  
    ourSong.start(); 

    Thread timer = new Thread(){ 
    public void run(){ 
     try{ 
      sleep(1000); } 
      catch (InterruptedException e){ 
      e.printStackTrace(); } 
      finally{ 
     Intent openMainActivity = new Intent("com.test.demo.MENU"); 
       startActivity(openMainActivity); }}         
            }; 
       timer.start(); } 

@Override 
protected void onPause() { 
      // TODO Auto-generated method stub 
    super.onPause(); 
    ourSong.release(); 
    finish(); 
      } 
     } 

Prefs:

public class Prefs extends PreferenceActivity{ 

@SuppressWarnings("deprecation") 
@Override 
protected void onCreate(Bundle savedInstanceState) { 
    Boolean customTitleSupported = requestWindowFeature 
       (Window.FEATURE_CUSTOM_TITLE);  
    // TODO Auto-generated method stub 
    super.onCreate(savedInstanceState); 
    addPreferencesFromResource(R.xml.prefs); 

              } 
          } 

prefs.xml:

<?xml version="1.0" encoding="utf-8" ?> 
    <PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android"> 
      <CheckBoxPreference android:title="splash screen music" 
        android:defaultValue="true" 
        android:key="checkbox" 
        android:summary="remove mark to stop music when splash start" /> 
    </PreferenceScreen> 
+1

Вы хотите написать внутри SharedPreferences, если ваше приложение должно начинаться с заставки или нет? – Blackbelt

+0

@blackbelt да, например. например, у вас есть 3 флажка, если первый флажок установлен, поэтому приложение начнет с всплеска и музыки, если второе приложение для проверки начнется с всплеска witout-музыки, и если thitd проверено приложение начнется без всплеска и без музыки, наконец, один флажок будет проверен только, спасибо – androidqq6

+0

is в Prefs, что вы хотите записать эти значения внутри sharedpreferences? – Blackbelt

ответ

1

Я добираюсь до половины решения того, что я ищу, что три различных функции checkbox, как код ниже, но все же я не могу получить их независимую проверку.

public class Splash extends Activity{ 
MediaPlayer ourSong; 
@Override 
protected void onCreate(Bundle savedInstanceState) { 
    this.requestWindowFeature(Window.FEATURE_NO_TITLE); 
    // TODO Auto-generated method stub 
    super.onCreate(savedInstanceState); 
     setContentView(R.layout.splash); 

     SharedPreferences getPrefs = PreferenceManager.getDefaultSharedPreferences(getBaseContext());     

     boolean without_splash_screen = getPrefs.getBoolean("without_splash_screen", true); 
      if (without_splash_screen == true) 
      { 
       Intent intent = new Intent(Splash.this, MainActivity.class);          
       startActivity(intent); 
      } 

    boolean splash = getPrefs.getBoolean("splash", true);  
    if(splash == true) { 
     setContentView(R.layout.splash); 
     Thread timer = new Thread() 
     { 
      public void run() 
      { 
       try 
       { 
        sleep(2000); 
       } 
       catch (InterruptedException e) 
       { 
        e.printStackTrace(); 
       } 
       finally 
       { 
        Intent intent = new Intent(Splash.this, MainActivity.class);          
        startActivity(intent); 
       } 
      }       
     }; 
     timer.start(); 
    }     

    ourSong = MediaPlayer.create(Splash.this, R.raw.splashsound); 

    SharedPreferences getPrefs1 = PreferenceManager.getDefaultSharedPreferences(getBaseContext()); 
    boolean music = getPrefs1.getBoolean("splash_music", true); 
    if (music == true)  
    ourSong.start(); 

    Thread timer = new Thread(){ 
     public void run(){ 
      try{ 
       sleep(2000); } 
       catch (InterruptedException e){ 
       e.printStackTrace(); } 
       finally{ 
        Intent intent = new Intent(Splash.this, MainActivity.class);          
        startActivity(intent); }}         
           }; 
     timer.start(); } 

@Override 
protected void onPause() { 
      // TODO Auto-generated method stub 
    super.onPause(); 
    ourSong.release(); 
    finish(); 
      } 
     } 
1
SharedPreferences getPrefs =PreferenceManager.getDefaultSharedPreferences(getBaseContext()); 
    boolean music = getPrefs.getBoolean("checkbox"); 
    if (music == true) 
    { 
     setContentView(R.layout.splash); 
     ourSong = MediaPlayer.create(Splash.this, R.raw.splashsound);   
     ourSong.start(); 
     Thread timer = new Thread() 
     { 
      public void run() 
      { 
       try 
       { 
        sleep(1000); 
       } 
       catch (InterruptedException e) 
       { 
        e.printStackTrace(); 
       } 
       finally 
       { 
        Intent openMainActivity = new Intent("com.test.demo.MENU"); 
        startActivity(openMainActivity); 
       } 
      }       
     }; 
     timer.start(); 
    } 
} 
else 
{ 
    Intent openMainActivity = new Intent("com.test.demo.MENU"); 
    startActivity(openMainActivity); 
} 
+0

, а также добавить getPrefs.setBoolean («checkbox», false); в вашем onpause – prvn

+0

мой друг, приведенный выше, привел два варианта: 1-if checkbox приведет к запуску брызг с музыкой или 2- если не будет проверено приложение, начните с всплеска и музыки, но я хочу добавить еще один вариант, который начать splach без музыки, так что, наконец, у нас есть 3 варианта: 1 - без всплесков и музыки .2 - с всплеском, но без музыки .3 - с брызгами и музыкой, пожалуйста, как мы можем добиться этого, спасибо alot – androidqq6

+0

, пожалуйста, проверьте сообщение снова (обновлено) , спасибо – androidqq6

1

Единственное, что вам нужно сделать, это добавить еще CheckBox к вашим предпочтениям, что путь:

prefs.xml

<?xml version="1.0" encoding="utf-8" ?> 
    <PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android"> 
     <CheckBoxPreference android:title="splash screen" 
       android:defaultValue="true" 
       android:key="splash" 
       android:summary="Start a spashscreen" /> 
     <CheckBoxPreference android:title="splash screen music" 
        android:defaultValue="true" 
        android:key="splash_music" 
        android:summary="Add some music to the splashscreen" /> 
    </PreferenceScreen> 

А теперь, вам просто нужно проверить значение «всплеск», чтобы узнать, нужно ли показывать всплывающее окно. Если он равен ложно, просто открыть новый вид деятельности:

Всплеск

public class Splash extends Activity{ 
    MediaPlayer ourSong; 
@Override 
protected void onCreate(Bundle savedInstanceState) { 
    this.requestWindowFeature(Window.FEATURE_NO_TITLE); 
    // TODO Auto-generated method stub 
    super.onCreate(savedInstanceState); 
     setContentView(R.layout.splash); 



    boolean splash = getPrefs.getBoolean("splash", true); 
    if(!splash) { 
     Intent openMainActivity = new Intent("com.test.demo.MENU"); 
     startActivity(openMainActivity); 
    } 
    ourSong = MediaPlayer.create(Splash.this, R.raw.splashsound); 

    SharedPreferences getPrefs = PreferenceManager.getDefaultSharedPreferences 
       (getBaseContext()); 
    boolean music = getPrefs.getBoolean("splash_music", true); 
    if (music == true)  
    ourSong.start(); 

    Thread timer = new Thread(){ 
    public void run(){ 
     try{ 
      sleep(1000); } 
      catch (InterruptedException e){ 
      e.printStackTrace(); } 
      finally{ 
     Intent openMainActivity = new Intent("com.test.demo.MENU"); 
       startActivity(openMainActivity); }}         
            }; 
       timer.start(); } 

@Override 
protected void onPause() { 
      // TODO Auto-generated method stub 
    super.onPause(); 
    ourSong.release(); 
    finish(); 
      } 
     } 

EDIT: Несколько советов, так как я видел, как вы только начинали в развитии Android:

В любом случае, удачи в вашем проекте (-ах)!

+0

У меня есть меню опций из 3-х кнопок (около, pref, exit), когда я устанавливаю приложение и открываю pref, по умолчанию проверяется флажок checkbox, запускается приложение со всплеском и музыкой, предположим, что вы отключили первый параметр для отключения всплеска или снятия флажка затем нажмите «Назад», затем нажмите «Выход», затем выйдите из приложения, затем снова откройте приложение и нажмите «префикс» и включите всплеск или включите всплеск и музыку, затем нажмите «Назад», затем нажмите «Выход» (вот в чем проблема), меню опций disa ppear, но приложение не выходит, вам нужно снова нажать префикс, чтобы поднять меню опций, а затем снова нажать exit, теперь он выходит из приложения, любой совет решает его, спасибо – androidqq6

+0

См. эту ссылку: http://developer.android.com/guide/topics/manifest /activity-element.html#nohist, может решить вашу проблему, чтобы поместить флаг 'noHistory' в вашу активность splashscreen. Но я не уверен, так как я действительно не понимаю вашу проблему здесь! – MagicMicky

+0

Я имею в виду после того, как всплеск проверки, чтобы включить кнопку выхода, не отвечает на щелчок с первого щелчка, вы должны дважды щелкнуть его, чтобы выйти из приложения, я попробую его решить. – androidqq6

1

Я предлагаю вам заменить флажок радиоприемником на достижение точки 3.

Как это:

<?xml version="1.0" encoding="utf-8" ?> 
    <PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android"> 
     <ListPreference 
         android:title="Splash settings" 
         android:summary="Select the way splash works" 
         android:key="splashPref" 
         android:defaultValue="0" 
         android:entries="@array/listArray" 
         android:entryValues="@array/listValues" /> 
    </PreferenceScreen> <!-- you can use anything as value - int or string --> 

И тогда в вашем коде:

... 
int splashType = getPrefs.getInt("splashPref", 0); 
switch (splashType) { 
case 2: 
    // skip splash 
case 1: 
    // only splash without music 
default: 
case 0: 
    // splash with music 
} 

Чтобы получить лучшую читаемость кода, я хотел бы предложить вам создать перечисление, который вы создадите из общей стоимости prefences, как:

public enum SplashPreferenceValue { 
    SPLASH_WITH_MUSIC(0), 
    SPLASH_WITHOUT_MUSIC(1), 
    NO_SPLASH(2); 


    private int value; 

    private SplashPreferenceValue(int value) { 
     this.value = value; 
    } 

    public static SplashPreferenceValue fromInt(int value) { 
     return new SplashPreferenceValue(value); 
    } 
}; 


... 


SplashPreferenceValue splashType = SplashPreferenceValue.fromInt(getPrefs.getInt("splashPref", 0)); 

switch (splashType) { 
case NO_SPLASH: 
    // skip splash 
    break; 
case SPLASH_WITHOUT_MUSIC: 
    // only splash without music 
    break; 
default: 
case SPLASH_WITH_MUSIC: 
    // splash with music 
    break; 
} 
+0

мой дорогой, где я должен положить выше класс, в класс splash или класс Prefs, спасибо – androidqq6

+0

@ androidqq6 вы имеете в виду перечисление? Вам решать, куда вы хотите поместить его. Глядя на ваш текущий подход, я предлагаю вам создать для него отдельный файл .java. – dant3

+0

мой дорогой им извините, но я новый для android, и я не знаю, как применить ваш код, вы можете объяснить больше или перестроить свой код и где и как его применять, спасибо большое – androidqq6

0

Из чего я могу понять, что вы хотите следующее:

A. пользователь выбирает один из флажков, то другие два установлены на ложный

Б., когда приложение запускается он проверяет предпочтения и будет играть/не играть музыку, шоу/не показывать заставку.

Для достижения A вам необходимо использовать метод onPreferenceChange. В этом методе вы проверите, изменилось ли предпочтение, истинно, если оно задано двумя другими предпочтениями равными false. Проблема возникает, если все три параметра являются ложными, и в этом случае вам нужно либо установить предпочтение по умолчанию, либо выполнить действие по умолчанию в классе Splash Activity.

Это должно позаботиться о том, чтобы для одного предпочтения было установлено значение true. Я бы поставил три предпочтения в категории предпочтений, чтобы показать пользователя, с которым они сгруппированы. Предпочтительным способом обработки этого случая будет группа переключателей, которая всегда обеспечивала бы выбор одной опции.

B. В вашей деятельности Splash я бы извлек вызов, чтобы начать следующее действие с помощью отдельного метода (переместите вызов finish() к этому методу), а затем в методе onCreate() проверьте настройки предпочтений. Если предпочтение заключается в том, чтобы пропустить всплеск, сделайте вызов метода startNextActivity, в противном случае введите поток ожидания и продолжите метод onResume() с соответствующими настройками музыки.

Вы не указали какой-либо код onResume() в своем примере кода, здесь вы должны начинать музыку. Также я бы переместил вызов, чтобы остановить музыку и закончить() до извлеченного метода startNextActivity().

Также вместо использования нити для запуска таймера используйте что-то вроде этого, что поможет сохранить гладкость и переместить таймер с основного потока.

new Handler().postDelayed(new Runnable() { 
    public void run() { 
     startNextActivity(); 
    } 
}, SPLASH_DISPLAY_LENGTH); 

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

Смежные вопросы