2013-10-06 6 views
0

이 앱에 큰 문제가 있습니다. 문제는 방향이 가로로 바뀌고 세로로 변경되면 음악이 두 번 트랙이 동시에 재생된다는 것입니다. 하지만 내가 초상화에 애플 리케이션을 시작할 때 나는 그것에 아무런 문제가 없다. 클래스의 OnPause 방법에 코드 블록을 넣어MediaPlayer가 방향 전환시 두 번 소리를 재생합니다.

package com.phone.sensor; 

import android.app.Activity; 
import android.hardware.Sensor; 
import android.hardware.SensorEvent; 
import android.hardware.SensorEventListener; 
import android.hardware.SensorManager; 
import android.media.MediaPlayer; 
import android.os.Bundle; 
import android.view.Menu; 
import android.widget.TextView; 

public class sensorActivity extends Activity implements SensorEventListener{ 
    public boolean musStatus = false; 
    public boolean musDeclare = true; 
    public MediaPlayer mp = null; 

    Sensor accelerometer; 
    SensorManager sm; 
    TextView acceleration; 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     if(savedInstanceState == null){ 
      if(mp != null){ 
       mp.stop(); 
       mp.reset(); 
       mp = null; 
      } 
     } else { 
      if(mp != null){ 
       mp.stop(); 
       mp.reset(); 
       mp = null; 
      } 
     } 
     setContentView(R.layout.activity_main); 
     sm=(SensorManager) getSystemService(SENSOR_SERVICE); 
     accelerometer=sm.getDefaultSensor(Sensor.TYPE_ACCELEROMETER); 
     sm.registerListener(this, accelerometer, SensorManager.SENSOR_DELAY_NORMAL); 

     acceleration=(TextView)findViewById(R.id.acceleration); 
    } 


    @Override 
    public boolean onCreateOptionsMenu(Menu menu) { 
     // Inflate the menu; this adds items to the action bar if it is present. 
     getMenuInflater().inflate(R.menu.main, menu); 
     return true; 
    } 


    @Override 
    public void onAccuracyChanged(Sensor sensor, int accuracy) { 
     // TODO Auto-generated method stub 

    } 

    @Override 
    public void onSaveInstanceState (Bundle outState) 
    { 
     super.onSaveInstanceState(outState); 
     outState.putBoolean("musStatus", musStatus); 
     outState.putBoolean("musDeclare", musDeclare); 
    } 

    public Object onRetainCustomNonConfigurationInstance() { 
     return this.mp; 
    } 

    @Override 
    public void onSensorChanged(SensorEvent event) { 
     // TODO Auto-generated method stub 
     acceleration.setText("X: "+event.values[0]+ 
       "\nY: "+event.values[1]+ 
       "\nZ: "+event.values[2]); 

     float x = event.values[0]; 
     float y = event.values[1]; 
     float z = event.values[2]; 

     if(y > 8.9) { 
      if(musDeclare == true) 
      { 
       mp = MediaPlayer.create(this, R.raw.alexander); 
       musDeclare = false; 
      } 

      if(musStatus == false) 
      { 
       mp.start(); 
       musStatus = true; 
      } 
     } 

     if(y < 5) 
     { 
      if(musStatus == true) 
      { 
       mp.stop(); 
       mp.reset(); 
       mp = null; 
       musStatus = false; 
       musDeclare = true; 
      } 
     } 
    } 
} 

답변

-1

시도

 if(mp != null && mp.IsPlaying()){ 
      mp.stop(); 
      mp.reset(); 
      mp = null; 
     } 
    } 
관련 문제