public static class StringExtensions {public static string RemoveUnnecessary (этот источник строки) {string result = string.Empty; string regex = новая строка (Path.GetInvalidFileNameChars ()) + новая строка (Path.GetInvalidPathChars ()); Regex reg = new Regex (string.Format ("[{0}]", Regex.Escape (regex))); result = reg.Replace (source, ""); результат возврата; }}
Вы можете использовать метод четко.
Вы должны использовать только один объект медиапланера
public class PlayaudioActivity extends Activity {
private MediaPlayer mp;
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
Button b = (Button) findViewById(R.id.button1);
Button b2 = (Button) findViewById(R.id.button2);
final TextView t = (TextView) findViewById(R.id.textView1);
b.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
stopPlaying();
mp = MediaPlayer.create(PlayaudioActivity.this, R.raw.far);
mp.start();
}
});
b2.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
stopPlaying();
mp = MediaPlayer.create(PlayaudioActivity.this, R.raw.beet);
mp.start();
}
});
}
private void stopPlaying() {
if (mp != null) {
mp.stop();
mp.release();
mp = null;
}
}
}
В соответствии с жизненным циклом MediaPlayer
, который вы можете просмотреть в руководстве API Android , я думаю, что вы должны называть reset()
вместо stop()
, а после этого снова готовиться медиаплеер (используйте только один), чтобы воспроизвести звук с самого начала. Также учтите, что звук может закончиться. Поэтому я также рекомендую реализовать setOnCompletionListener()
, чтобы убедиться, что если вы попытаетесь снова воспроизвести звук, он не сработает.
на всякий случай кто-то приходит к этому вопросу, у меня есть более простая версия.
public static MediaPlayer mp;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Button b = (Button) findViewById(R.id.button);
Button b2 = (Button) findViewById(R.id.button2);
b.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
mp = MediaPlayer.create(MainActivity.this, R.raw.game);
mp.start();
}
});
b2.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
mp.stop();
// mp.start();
}
});
}
Чтобы остановить Media Player без риска исключения из-за незаконного состояния, вы должны сделать
try {
mp.reset();
mp.prepare();
mp.stop();
mp.release();
mp=null;
}
catch (Exception e)
{
e.printStackTrace();
}
, а не только
try {
mp.stop();
mp.release();
mp=null;
}
catch (Exception e)
{
e.printStackTrace();
}