2012-04-27 5 views
0

Я хочу знать, как сохранить приложение при перезагрузке при изменении ориентации?Игнорировать изменение ориентации в Android

У меня есть небольшое тестовое приложение, которое будет воспроизводить звуковой звук до тех пор, пока не будет нажата кнопка останова. Если я изменю свой Android или симулятор с горизонтальной на портретную, то кнопка останова не работает. Загружается второе появление приложения. Я хочу, чтобы первое появление продолжало работать независимо от того, была ли изменена ориентация.

main.xml

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 

android:layout_width="fill_parent" 

android:layout_height="fill_parent" android:orientation="horizontal"> 


<LinearLayout 

android:layout_width="wrap_content" 

android:layout_height="match_parent" 

android:layout_weight="0.64" android:orientation="horizontal"> 


<Button 

android:id="@+id/button1" 

android:layout_width="wrap_content" 

android:layout_height="wrap_content" 

android:text="Play" /> 


<Button 

android:id="@+id/button2" 

android:layout_width="wrap_content" 

android:layout_height="wrap_content" 

android:text="Stop" /> 


</LinearLayout> 


</LinearLayout> 

Test.java

import android.app.Activity; 

import android.media.AudioManager; 

import android.media.MediaPlayer; 

import android.os.Bundle; 

import android.view.View; 

import android.widget.Button; 


public class TestAppActivity extends Activity { 

private Button btnDisplay; 

private MediaPlayer mediaPlayer; 


@Override 

public void onCreate(Bundle savedInstanceState) 

{ 

super.onCreate(savedInstanceState); 

setContentView(R.layout.main); 

setVolumeControlStream(AudioManager.STREAM_MUSIC); 

mediaPlayer = MediaPlayer.create(this, R.raw.nut); 

mediaPlayer.setLooping(true); 


((Button)findViewById(R.id.button1)).setOnClickListener(new View.OnClickListener() { 


public void onClick(View v) { 

mediaPlayer = MediaPlayer.create(LoopBugActivity.this, R.raw.nut); 

mediaPlayer.setLooping(true); 

mediaPlayer.start(); 

} 

}); 



((Button)findViewById(R.id.button2)).setOnClickListener(new View.OnClickListener() { 


public void onClick(View v) { 

mediaPlayer.stop(); 

} 

}); 

} 

} 

ответ

2

Я добавил к манифесту: андроид: screenOrientation = "пейзаж" андроид: configChanges = "keyboardHidden | ориентация "

и к файлу Java.

@Override public void onConfigurationChanged(Configuration newConfig) { 
super.onConfigurationChanged(newConfig);  
setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE); 
    } 

Макет остается в Пейзаже, и поворот ориентации не влияет на воспроизведение приложения.

0

Это путь Android активность была разработана. При изменении ориентации он перезагрузит новую активность. Либо вы отключите ориентацию, либо разделите приложение на 2 уровня (передняя и задняя части). Передняя часть будет просто отображать кнопки прогресса и управления, а задний конец будет принимать команду от переднего конца и выполнять. В этой модели у вас не будет проблемы, с которой вы сейчас сталкиваетесь.

Взгляните на это link, это может вам помочь.

1

Это происходит потому, что ваша деятельность уничтожена и перезапущена во время изменения ориентации (также называемой изменением конфигурации в Android-land).

В файле AndroidManifest.xml, добавьте следующие строки в декларации деятельности:

android:configChanges="orientation" 

Так что это выглядит примерно так:

 <activity android:name="com.your.package.TestAppActivity" 
     android:configChanges="orientation" 
    /> 

Ваша деятельность может затем прослушивать изменения конфигурации и реагировать вручную. Изменение ориентации больше не будет автоматически перезапускать активность.

0

Посмотрите на эту статью: Handling Runtime Changes

Я думаю, что лучше обрабатывать изменения, но у вас еще есть возможность для предотвращения его, как описано в разделе «б Handle конфигурации изменить себя.».

1

Я все еще не получил результат, который я искал, содержимое все еще менялось, когда я вращал устройство (метод onCreate() все еще назывался). Фактический эффект, который я достиг, когда я дал пустого конфигурацию объекта

новой конфигурацию() вместо предоставленного параметр newConfig

@Override 
public void onConfigurationChanged(Configuration newConfig) { 
    super.onConfigurationChanged(new Configuration()); 
} 

Надежда это помогает кто хотел в общей сложности игнорировать ориентации изменение событий

+0

спасибо Viorel .. отличная помощь :) – indira

Смежные вопросы