2012-04-06 73 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