shared splash with splash screen

问题描述:

我的应用程序通过启动屏幕上的音乐开始,我使用sharedpreference来停止音乐,所以下次打开应用程序启动屏幕时仍然没有音乐。shared splash with splash screen

IM试图让偏好屏幕,三个独立的不同的检查框功能,如果你还检查一个checkedbox不能签其他两个如下:

首先checkedbox:开始闪屏的应用程序和音乐(通过下面的代码实现),

二checkedbox:有闪屏和没有音乐(通过下面的代码实现)启动应用程序,

第三个复选框:启动应用程序没有闪屏和音乐(未实现)。

任何帮助将不胜感激,谢谢

代码:

飞溅:

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(); 
      } 
     } 

偏好设置:

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 2013-07-04 10:29:14

+0

@blackbelt yes,ex。就像有3个复选框,如果检查第一个,所以应用程序将开始与飞溅和音乐,如果第二次检查的应用程序开始与飞溅的音乐和如果thitd检查应用程序开始没有飞溅和没有音乐,最后只有一个复选框被检查,谢谢 – androidqq6 2013-07-04 10:42:11

+0

在Prefs中,你想在sharedpreferences中写入这些值? – Blackbelt 2013-07-04 10:44:17

我达到了我寻求的一半解决方案,这是三种不同的功能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(); 
      } 
     } 

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);在您的收件人 – prvn 2013-05-14 06:45:15

+0

我的朋友上面的答案代码导致了两个选项:1 - 如果复选框导致启动与音乐飞溅或2 - 如果没有选中应用程序开始与飞溅和音乐,但我想添加另一个选项是开始splach没有音乐,所以最后我们有3个选项:1 - 没有飞溅和音乐.2 - 与飞溅,但没有音乐.3 - 与飞溅和音乐,请如何实现这一点,非常感谢 – androidqq6 2013-07-02 13:07:42

+0

请检查后(更新) ,谢谢 – androidqq6 2013-07-03 14:52:19

你需要做的唯一事情是另一个复选框添加到您的偏好方式:

的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(); 
      } 
     } 

编辑:的一些技巧,因为我看到你刚刚开始在Android的发展:

无论如何,祝你的项目好运!

+0

我有三个按钮(约,pref,退出)的选项菜单,当我安装应用程序并打开pref,默认两个checkedbox被选中,运行与飞溅和音乐的应用程序,假设你没有选中第一个选项禁用飞溅或未选中启动并添加音乐,然后按退出,然后按退出,退出应用程序,然后重新打开应用程序,然后按pref并启用飞溅或启用飞溅和音乐,然后按回退,然后按退出(这是问题),选项菜单disa ppear但应用程序不退出,你必须再次按pref升起选项菜单,然后再次按退出它退出应用程序任何建议解决它,谢谢 – androidqq6 2013-07-07 23:04:07

+0

看到这个链接:http://developer.android.com/guide/topics/manifest /activity-element.html#nohist,可以解决你的问题,把'noHistory'标志放到你的splashscreen活动中。但我不确定,因为我并不真正了解您的问题! – MagicMicky 2013-07-07 23:31:23

+0

我的意思是检查后启动退出按钮不响应点击从第一次点击,你必须点击它两次退出应用程序,我会尝试onHistory解决它 – androidqq6 2013-07-08 06:16:16

我建议你用无线电取代复选框到达第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 
} 

为了获得更好的代码的可读性,我建议你创建枚举,你会从共享使用偏好价值创造,如:

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 2013-07-08 13:21:03

+0

@ androidqq6你的意思是枚举吗?您决定在那里放置它,取决于您。 看着你目前的做法,我会建议你为它创建单独的.java文件。 – dant3 2013-07-10 13:11:50

+0

亲爱的我很抱歉,但即时通讯新的android和我不知道如何应用您的代码可以解释更多或重新排列您的代码以及在哪里和如何应用它,谢谢很多 – androidqq6 2013-07-11 19:06:15

从我能理解的你想要以下事情发生:

A.用户选择的复选框,然后另外两个被设置为false

B.之一,当应用程序启动时,它会检查的喜好,将发挥/不能播放音乐,显示/不显示启动画面。

要实现A,您需要使用onPreferenceChange方法。在此方法中,您将检查首选项是否变为true,如果它将其他两个首选项设置为false。如果在这种情况下您需要设置默认首选项或在Splash Activity类中执行默认操作,则所有三个首选项都为false将出现问题。

这应该注意确保只有一个首选项设置为true。我会将这三个首选项放在首选项类别中以显示他们被分组的用户。处理这种情况的首选方法是通过一个单选按钮组,它总是确保总是选择一个选项。

B.在您的Splash活动中,我将提取调用以启动下一个单独方法的活动(将finish()调用移动到此方法),然后在onCreate()方法中检查首选项设置。如果首选项跳过飞溅,请调用startNextActivity方法,否则请进入等待线程并使用适当的音乐设置继续执行onResume()方法。

您的示例代码中没有包含任何onResume()代码,这是您开始播放音乐的地方。此外,我会移动呼叫以停止音乐并完成()提取的startNextActivity()方法。

此外,而不是使用线程来运行计时器使用这样的事情,这将有助于保持事情平稳,并移动计时器关闭主线程。

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

希望有所帮助。