2013-10-22 89 views
0

我使用媒體播放器在我的應用程序上播放聲音。它工作得很好。在出現活動後播放聲音

我在單獨的線程上播放聲音。甚至認爲,在活動出現之前,部分聲音播放。

我試圖播放聲音onCreate方法。它沒有工作。 onStart和 onResume。它有一些問題。每次活動都會重新開始。有時候我甚至不會觸摸設備!

活動後播放聲音的最佳方式是什麼?

public boolean played = false; 
@Override 
protected void onResume() { 
    // TODO Auto-generated method stub 
    super.onResume(); 
    if (!played) 
     Settings.playSound(dvd.titleImageName.replace("png", "mp3"), this); 
    played = true; 
} 

public static MediaPlayer mp = null; 
public static void playSound(String fileName, Context c) 
{ 
    //MediaPlayer mp = MediaPlayer.create(c, resId); 
    if (mp!=null) 
    { 
     mp.stop(); //error 
     mp.reset(); 
     mp.release(); 
    } 

    mp = new MediaPlayer(); 

    AssetFileDescriptor descriptor; 
    try { 
     descriptor = c.getResources().getAssets().openFd("sounds/" + fileName); 
     mp.setDataSource(descriptor.getFileDescriptor(), descriptor.getStartOffset(), descriptor.getLength()); 
     descriptor.close(); 
     mp.prepare(); 
    } catch (IOException e) { 
     // TODO Auto-generated catch block 
     e.printStackTrace(); 
    } 

    if (mp == null) return; 
    mp.setOnCompletionListener(new OnCompletionListener() { 
     @Override 
     public void onCompletion(MediaPlayer mp) { 

     } 
    }); 

    mp.setOnPreparedListener(new OnPreparedListener() { 

     @Override 
     public void onPrepared(MediaPlayer mp) { 
      // TODO Auto-generated method stub 

     } 
    }); 

    mp.setOnVideoSizeChangedListener(new OnVideoSizeChangedListener() { 

     @Override 
     public void onVideoSizeChanged(MediaPlayer mp, int width, int height) { 
      // TODO Auto-generated method stub 

     } 
    }); 

    new Thread(new Runnable() { 

     @Override 
     public void run() { 
      // TODO Auto-generated method stub 
      mp.start(); 
     } 
    }).start(); 
} 
+0

ü可以提供你的代碼。 – Abhishek

回答

1

您的played變量只在活動存活時才起作用。如果它被殺害,played不保留。例如,旋轉你的設備,你會聽到聲音再次播放。

  • 保存狀態onSavedInstanceState束(飾)和它的onCreate
  • 恢復播放在OnCreate中或的onResume
+0

對,但我的活動不旋轉。我將按照你所描述的來實現它,以防止無意義的播放聲音。我認爲它會起作用。我會盡快回復你。謝謝。 – hasan83

+0

最後一個問題onResume甚至onPostResume並沒有阻止播放聲音之前出現! – hasan83