2014-08-19 4 views
0

Итак, на данный момент я внедрил этот код:Звук не воспроизводится при нажатии кнопки?

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); 
     } 
    } 
+0

У вас нет ошибок? Вы должны добавить предложение 'catch (Exception e)' на всякий случай. – jaket

+0

Да, как и в «остальной части моего кода», кроме как с помощью e.printStackTrace() между скобками. – jaket

+0

Этот код столкнется с ошибкой состояния 128, если файл завершит игру до следующего щелчка. Если вы проверите диаграмму состояния, вы увидите, что PlaybackComplete не является .isPlaying(), но единственный способ вернуться в состояние Idle - это .reset(). Таким образом, вы будете в PlaybackComplete и не будете играть, чтобы не сбросить настройки, а затем попытайтесь установить .setDataSource(), пока не находитесь в режиме ожидания. Переместите mp.reset(); из этой скобки и всегда это делать. – Tatarize

ответ

0

Сначала я советую вам создать новую папку в папке Реза, которая имеет имя сырых, а затем поместить Ваш звуковой файл в этой папке.

И после этого написать этот исходный код в методе OnClick:

b.setOnClickListener(new View.OnClickListener() { 

     @Override 
     public void onClick(View v) { 

      // mp = new MediaPlayer(); 
      mp = MediaPlayer.create(this, R.raw.pop); 
      mp.setAudioStreamType(AudioManager.STREAM_MUSIC); 
      mp.setLooping(true); 
      mp.start(); 

     } 
    }); 

;

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