我正在爲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