我正在为Android创建音乐播放器,它主要工作。问题是,当我水平转动设备时,我失去了Activity中的所有变量(这是有道理的,因为它被破坏并重新创建)。设备旋转时丢失'MediaPlayer'(和其他变量)
我试过用捆绑来存储玩家的状态onSaveInstanceState & onRestoreInstanceState但我仍然无法访问媒体播放器。有没有办法像捆绑的MediaPlayer一样传递对象?我应该使用数据库吗?
感谢
我正在为Android创建音乐播放器,它主要工作。问题是,当我水平转动设备时,我失去了Activity中的所有变量(这是有道理的,因为它被破坏并重新创建)。设备旋转时丢失'MediaPlayer'(和其他变量)
我试过用捆绑来存储玩家的状态onSaveInstanceState & onRestoreInstanceState但我仍然无法访问媒体播放器。有没有办法像捆绑的MediaPlayer一样传递对象?我应该使用数据库吗?
感谢
您应该使用服务提供“背景”音频播放功能,allo让用户在活动之间切换或旋转设备而不停止播放。
退房android_packages_apps_Music这是开源的CM在github上,用它MediaPlaybackService延伸服务要做到这一点,结账MediaPlaybackService.java
对于你无法通过捆绑传递对象,我会建议你使用简单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 ...)。
以下两种方法都允许您保持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
另一种方法是:
在AndroidManifest.xml后,找到你并添加以下属性和值:
android:configChanges="orientation|screenSize"
这将停止您的活动被销毁并重新定位。
这将工作,但如果您使用横向和纵向的不同布局,则需要处理替换布局。 – draksia 2012-04-06 18:16:39
你好,这只是避免了这个问题 - 这正是我用的:) – 2012-04-06 18:35:58
任何尝试此操作的人都一定要将:android:name =“。ClassName”添加到清单 – 2012-04-06 19:17:53