2012-04-06 42 views
0

我正在为Android创建音乐播放器,它主要工作。问题是,当我水平转动设备时,我失去了Activity中的所有变量(这是有道理的,因为它被破坏并重新创建)。设备旋转时丢失'MediaPlayer'(和其他变量)

我试过用捆绑来存储玩家的状态onSaveInstanceState & onRestoreInstanceState但我仍然无法访问媒体播放器。有没有办法像捆绑的MediaPlayer一样传递对象?我应该使用数据库吗?

感谢

回答

4

您应该使用服务提供“背景”音频播放功能,allo让用户在活动之间切换或旋转设备而不停止播放。

退房android_packages_apps_Music这是开源的CM在github上,用它MediaPlaybackService延伸服务要做到这一点,结账MediaPlaybackService.java

1

对于你无法通过捆绑传递对象,我会建议你使用简单SharedPreference来存储对象。 这里有一个简单的实现:

public class Data { 
    private SharedPreferences preferences; 
    private int test; 

    public Data (Context context) 
    {   
     preferences = context.getSharedPreferences("Data", 0); 
     test = preferences.getInt("test", 0); 
    } 

    public int getTest() 
    {  
      return test; 
    } 

    public void setTest(int input) 
    {  
     this.test = input; 
     SharedPreferences.Editor editor = preferences.edit(); 
     editor.putInt("Test", input); 
     editor.commit(); 
    }  
} 

你刚才初始化在OnCreate()变量:

数据MYDATA =新的数据(本);

而且您可以使用set/get和mydata来存储/检索持久性数据。

编辑:它可能不适用于MediaPlayer对象,但适用于其他经典类型(int,string,boolean ...)。

1

以下两种方法都允许您保持mediaplayer对象通过旋转,但都不使用分组。

  • 您可以通过使用onRetainNonConfigurationInstance()保存变量和getLastNonConfigurationInstance()旋转后捡回来坚持你的媒体播放器,但这种方法不一定是最好的,因为它并不总是叫

    - 见这个SO张贴更多信息https://stackoverflow.com/a/3916068/655822

  • 或者,你可以通过扩展您的应用程序类并将其存储在那里

    下面

    坚持你的媒体播放器从链接的SO回答中复制的信息,以便使此答案更快地阅读

    如果将要使用全局单例,则可以将数据传递给很多人。

    public class YourApplication extends Application 
    {  
        public SomeDataClass data = new SomeDataClass(); 
    } 
    

    然后通过调用它的任何活动:

    YourApplication appState = ((YourApplication)this.getApplication()); 
    appState.data.UseAGetterOrSetterHere(); // Do whatever you need to with the data here. 
    

    - 见本SO发布更多的信息对https://stackoverflow.com/a/4208947/655822

+0

任何尝试此操作的人都一定要将:android:name =“。ClassName”添加到清单 – 2012-04-06 19:17:53

0

另一种方法是:

在AndroidManifest.xml后,找到你并添加以下属性和值:

android:configChanges="orientation|screenSize" 

这将停止您的活动被销毁并重新定位。

+0

这将工作,但如果您使用横向和纵向的不同布局,则需要处理替换布局。 – draksia 2012-04-06 18:16:39

+0

你好,这只是避免了这个问题 - 这正是我用的:) – 2012-04-06 18:35:58