2013-09-11 3 views
1

Я видел много других сообщений по этому вопросу, но я не могу заставить это работать. Я просто пытаюсь использовать MediaPlayer для воспроизведения простой песни. Это не проблема кнопки с пользовательского интерфейса, так как я могу проверить кнопки кнопки startMusic, и stopMusic получат вызов.android - MediaPlayer не играет, когда public static

player.play(); и player.stop() ничего не делают.

import android.os.Bundle; 
import android.app.Activity; 
import android.view.Menu; 
import android.view.View; 
import android.widget.*; 
import android.media.MediaPlayer; 


public class MainActivity extends Activity 
{ 
    private static MediaPlayer player = new MediaPlayer(); 
    protected void onCreate(Bundle savedInstanceState) 
    { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_main); 
     player.create(MainActivity.this,R.raw.sadsadsad); 
    } 

    @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; 
    } 


    public void changeLabel(View view) 
    { 
     TextView myTextView = (TextView) findViewById(R.id.myTextView); 
     myTextView.setText("Label changed"); 
    } 

    public void playMusic(View view) 
    { 
     player.start(); 
    } 

    public void stopMusic(View view) 
    { 
     player.stop(); 
    } 
} 

Опять же, воспроизведение и остановка работы кнопок, а контрольные точки ударили .start() и .stop().

+0

Я смущен. Ваш заголовок говорит, что ваш MediaPlayer не играет, но тело вашего сообщения говорит, что он делает ??? Какие методы не работают? – codeMagic

+0

Я просто попытался уточнить. Я метод playMusic и stopMusic вызываются с помощью кнопок, но player.start() и player.stop() ничего не делают. Извините за путаницу. – Siriss

+0

Почему 'player' 'static'? если вы удалите модификатор 'static', я думаю, что он должен работать – codeMagic

ответ

1

Не уверен, что это сработает, потому что у меня нет большого опыта работы с MediaPlayer, но слишком много для комментария. Во всяком случае, попробовать

MediaPlayer player; 
protected void onCreate(Bundle savedInstanceState) 
{ 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main); 
    player = MediaPlayer.create(MainActivity.this,R.raw.sadsadsad); 
} 

Редактировать

Попробуйте переставить

player = MediaPlayer.create(MainActivity.this,R.raw.sadsadsad); 

из onCreate() и в playMusic()

public void playMusic(View view) 
{ 
    player = MediaPlayer.create(MainActivity.this,R.raw.sadsadsad); 
    player.start(); 
} 

Я также думаю, что вы должны позвонить player.release() в stopMusic(). Здесь может быть неважно, но я считаю, что это будет безопасно.

+0

Эй, это работает, но по какой-то причине он работает только один раз. Если я впервые попал в игру, он будет играть, тогда, если я нажму стоп, он остановится. Если я сделаю это снова, он ничего не сделает. Есть идеи? и СПАСИБО за помощь. – Siriss

+0

Вы получаете исключение, сбой?Или просто ничего не делает во второй раз? Я уйду через минуту, и это может быть несколько, прежде чем я смогу вернуться, но я проверю, есть ли у вас ответ, когда я делаю – codeMagic

+0

Нет сбоев, похоже, что он не делает ничего во второй раз. Еще раз спасибо – Siriss

2

Из комментария об остановке проигрывателя, и он не воспроизводится снова. Когда медиаплеер остановлен, вам нужно подготовить() его снова. Если вы хотите, чтобы остановить медиаплеера и не должны подготовить его я хотел бы предложить

public void stopMusic(View view) 
{ 
    if(player != null && player.isPlaying()) 
    { 
     player.pause(); 
     player.seekTo(0); 
    } 
} 

Если вы посмотрите на список государственного here вы должны знать, что происходит. Кроме того, вы используете статический метод (создать (..)) из экземпляра (игрока), а не из класса (MediaPlayer)

Edit:

Как вы просили. Использование MediaPlayer.create (...) является правильным способом, и если вы используете IDE, например eclipse, он предупредит вас, что, поскольку MediaPlayer.create является статическим методом, он должен использоваться из класса (MediaPlayer), а не из созданного экземпляра. Я не уверен, что это вызовет проблему, если это будет сделано с помощью экземпляра, но я придерживаюсь философии, что все предупреждения являются ошибками, поэтому на всякий случай я стараюсь придерживаться стандартных правил кодирования.

+0

Спасибо. Не могли бы вы объяснить больше об использовании create() из MediaPlayer вместо моего экземпляра? – Siriss

+0

Помогло ли решение pause/seekTo решить проблему остановки/воспроизведения? – Raigex

+0

сделал. Оба ответа правильны, и, поскольку CodeMagic ответил сначала, я собираюсь проверить его и усовершенствовать. Еще раз спасибо. – Siriss

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