Итак, на данный момент я внедрил этот код:Звук не воспроизводится при нажатии кнопки?
final MediaPlayer mp = new MediaPlayer(); Кнопка b = (кнопка) findViewById (R.id.button);
b.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
if (mp.isPlaying()) {
mp.stop();
mp.reset();
}
try {
AssetFileDescriptor afd;
afd = getAssets().openFd("pop.mp3");
mp.setDataSource(afd.getFileDescriptor(), afd.getStartOffset(), afd.getLength());
mp.prepare();
mp.start();
} catch (IllegalStateException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
});
никаких ошибок вообще. Приложение запускается и работает нормально, но несмотря на то, что вышеупомянутый метод реализован, я вообще не слышу звука.
Вот остальная часть моего кода:
public class MyActivity2 extends Activity {
private String[] colors;
private String[] values;
private TextView tv;
private RelativeLayout rl;
Button n;
int index = 0;
int position2;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_my_activity2);
n = (Button) findViewById(R.id.button);
tv = (TextView) findViewById(R.id.textView);
rl = (RelativeLayout) findViewById(R.id.layout_view);
Typeface typeface = Typeface.createFromAsset(getAssets(), "BebasNeue Bold.ttf");
n.setTypeface(typeface);
Typeface face = Typeface.createFromAsset(getAssets(), "OSP-DIN.ttf");
tv.setTypeface(face);
final MediaPlayer mp = new MediaPlayer();
Button b = (Button) findViewById(R.id.button);
b.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
if (mp.isPlaying()) {
mp.stop();
mp.reset();
}
try {
AssetFileDescriptor afd;
afd = getAssets().openFd("Facebook Chat 'pop' Sound 3.mp3");
mp.setDataSource(afd.getFileDescriptor(), afd.getStartOffset(), afd.getLength());
mp.prepare();
mp.start();
} catch (IllegalStateException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
} catch (Exception e) {
}
}
});
values = getResources().getStringArray(R.array.allthings_array);
colors = getResources().getStringArray(R.array.colorcode_array);
n.setOnTouchListener(new View.OnTouchListener() {
@Override
public boolean onTouch(View v, MotionEvent event) {
switch (event.getAction()) {
case MotionEvent.ACTION_DOWN:
if (index == 5) {
Toast.makeText(getApplicationContext(), "More coming soon!", Toast.LENGTH_SHORT).show();
} else {
position2 = (index++);
}
String textValue = values[position2];
tv.setText(textValue);
Random RAND = new Random();
int position = RAND.nextInt(colors.length);
String nextValue = colors[position];
rl.setBackgroundColor(Color.parseColor(nextValue));
n.setBackgroundColor(Color.argb(00, 00, 00, 00));
return true;
case MotionEvent.ACTION_UP:
n.setBackgroundColor(Color.argb(00, 00, 00, 00));
return true;
default:
return false;
}
}
});
}
@Override
public void onBackPressed() {
super.onBackPressed();
overridePendingTransition(R.anim.animation4, R.anim.animation3);
}
}
У вас нет ошибок? Вы должны добавить предложение 'catch (Exception e)' на всякий случай. – jaket
Да, как и в «остальной части моего кода», кроме как с помощью e.printStackTrace() между скобками. – jaket
Этот код столкнется с ошибкой состояния 128, если файл завершит игру до следующего щелчка. Если вы проверите диаграмму состояния, вы увидите, что PlaybackComplete не является .isPlaying(), но единственный способ вернуться в состояние Idle - это .reset(). Таким образом, вы будете в PlaybackComplete и не будете играть, чтобы не сбросить настройки, а затем попытайтесь установить .setDataSource(), пока не находитесь в режиме ожидания. Переместите mp.reset(); из этой скобки и всегда это делать. – Tatarize