0

Вопрос по mobile, android-layout, android, java – Потеря MediaPlayer (и других переменных) при повороте устройства

Я создаю музыкальный проигрыватель для Android, и он в основном работает. Проблема в том, что когда я поворачиваю устройство по горизонтали, я теряю все переменные из Activity (что имеет смысл, потому что оно уничтожено и воссоздано).

Я пытался использовать комплекты для сохранения состояния проигрывателя с помощью onSaveInstanceState & amp; onRestoreInstanceState, но я все еще не могу получить доступ к медиаплееру. Есть ли способ передать объекты, такие как MediaPlayer в пакетах? Должен ли я использовать базу данных вместо этого?

Спасибо

  • Error: User Rate Limit Exceeded

    от Edd Turtle
  • Error: User Rate Limit Exceeded

    от Edd Turtle
  • Error: User Rate Limit Exceeded

    от
  • 1

    Оба метода

    приведенные ниже, позволят вам вращать объект медиаплеера, но не использовать связки.

    You could persist your media player by using onRetainNonConfigurationInstance() to save the variable and getLastNonConfigurationInstance() to retrieve it after the rotation, but this method isn't necessarily the best as it is not always called

    -See this SO post for more info https://stackoverflow.com/a/3916068/655822

    Or you could persist your media player by extending your application class and storing it in there

    below info copied from the linked SO answer for the purpose of making this answer quicker to read

    You can pass data around in a Global Singleton if it is going to be used a lot.

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

    Then call it in any activity by:

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

    -See this SO post for more info on that https://stackoverflow.com/a/4208947/655822

  • 0

    Другим способом было бы:

    В вашем AndroidManifest.xml найдите запись о вашей деятельности и добавьте следующий атрибут и значение:

    android:configChanges="orientation|screenSize"
    

    Это остановит вашу деятельность от разрушения и воссоздания на ориентации.

  • 4

    Вам следует использовать Сервис для предоставления &

    quot; фона & quot; возможности воспроизведения аудио, позволяющие Пользователь может переключаться между действиями или вращать устройство без остановки воспроизведения.

    Проверять, выписываться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 ():

    Data mydata = new Data(this);

    И вы можете использовать set / get с mydata для хранения / извлечения ваших постоянных данных.

    Редактировать: Возможно, он не подходит для объектов MediaPlayer, но для других классических типов (int, string, boolean ...).