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

0

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

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

Спасибо

Ваш Ответ

4   ответа
0

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

android:configChanges="orientation|screenSize"

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

Error: User Rate Limit Exceeded
Error: User Rate Limit Exceeded Edd Turtle
4

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

Проверять, выписыватьсяandroid_packages_apps_Music который является открытым исходным кодом CM на GitHub, он использует MediaPlaybackService расширяет службы, чтобы сделать это, извлечение MediaPlaybackService.java

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

Error: User Rate Limit Exceeded Edd Turtle
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 ...).

Похожие вопросы