2017-01-10 8 views
0

У меня есть песни из json в виде списка и кнопка воспроизведения в каждой строке, после нажатия кнопки воспроизведения Мое приложение зависает и появляется диалоговое окно приложения не отвечает, когда-то медиа-плеер начал после замораживания иногда его сбои. Из-за App не реагирует. Это мой код:Приложение не отвечает во время воспроизведения медиафайлов с URL-адреса

viewHolder.playButton.setOnClickListener(new View.OnClickListener() { 
      @Override 
      public void onClick(View v) { 

        selectedPosition = position; 

        if (selectedPosition != mPlayingPosition) { 

         try { 
          mPlayerforplanet.reset(); 
          mPlayerforplanet.setAudioStreamType(AudioManager.STREAM_MUSIC); 
          mPlayerforplanet.setDataSource(song_urls); 

          logger.addRecordToLog("MediaPlayer audio session ID: " + mPlayerforplanet.getAudioSessionId()); 
          logger.addRecordToLog("Media Player started " + "Started !"); 
          mPlayerforplanet.prepare(); 
          mPlayerforplanet.start(); 

         } catch (IOException e) { 
          e.printStackTrace(); 
         } 
         // playSongs(position);(i also try with method of playsong but no luck) 

         Toast.makeText(getContext(), "play song" + mPlayingPosition, Toast.LENGTH_SHORT).show(); 

      }}}); 

Log кот после щелчка на кнопке воспроизведения

01-10 07:13:33.501 17284-17293/luck.materialdesign.tabsnavigator I/art: Thread[5,tid=17293,WaitingInMainSignalCatcherLoop,Thread*=0xab8d8600,peer=0x12c000a0,"Signal Catcher"]: reacting to signal 3 
01-10 07:13:34.273 17284-17293/luck.materialdesign.tabsnavigator I/art: Wrote stack traces to '/data/anr/traces.txt' 
+0

Я не уверен, но однажды попытаюсь создать поток для воспроизведения музыки и решить вашу проблему. –

+0

OK. я попробую сэр. Есть ли какой-нибудь учебник о музыкальном проигрывателе в потоке? –

ответ

3

Пожалуйста, используйте prepareAsync вместо подготовки и обрабатывать onPrepared и запуск триггера оттуда.

mPlayerforplanet.prepareAsync(); 
public void onPrepared(MediaPlayer mp) { 
    mPlayerforplanet.start; 
} 

Пример код:

package com.example.simplemediaplayer.app; 

import android.media.AudioManager; 
import android.media.MediaPlayer; 
import android.support.v7.app.ActionBarActivity; 
import android.os.Bundle; 
import android.util.Log; 
import android.view.Menu; 
import android.view.MenuItem; 
import android.widget.Toast; 

import java.io.IOException; 


public class MediaPlayerActivity extends ActionBarActivity { 

    private static final String TAG = "tag"; 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_media_player); 

     String url = "http://www.brothershouse.narod.ru/music/pepe_link_-_guitar_vibe_113_club_mix.mp3"; // your URL here 
     MediaPlayer myMediaPlayer = new MediaPlayer(); 
     myMediaPlayer.setAudioStreamType(AudioManager.STREAM_MUSIC); 
     try { 
      myMediaPlayer.setDataSource(url); 
      myMediaPlayer.prepareAsync(); // might take long! (for buffering, etc) 

     } catch (IOException e) { 
      Toast.makeText(this, "mp3 not found", Toast.LENGTH_SHORT).show(); 
      e.printStackTrace(); 
     } 

     //mp3 will be started after completion of preparing... 
     myMediaPlayer.setOnPreparedListener(new MediaPlayer.OnPreparedListener() { 

      @Override 
      public void onPrepared(MediaPlayer player) { 
       player.start(); 
      } 

     }); 

    } 


    @Override 
    public boolean onCreateOptionsMenu(Menu menu) { 
     // Inflate the menu; this adds items to the action bar if it is present. 
     getMenuInflater().inflate(R.menu.media_player, menu); 
     return true; 
    } 

    @Override 
    public boolean onOptionsItemSelected(MenuItem item) { 
     // Handle action bar item clicks here. The action bar will 
     // automatically handle clicks on the Home/Up button, so long 
     // as you specify a parent activity in AndroidManifest.xml. 
     int id = item.getItemId(); 
     if (id == R.id.action_settings) { 
      return true; 
     } 
     return super.onOptionsItemSelected(item); 
    } 
} 

Для искать бар использовать заново работоспособный:

Начало работоспособным,

public void onPrepared(MediaPlayer player) { 
      mPlayerforplanet.start(); 
      mUpdateSeekBar.run(); 
     } 

Код в работоспособном

private final Runnable mUpdateSeekBar = new Runnable() { 
     @Override 
     public void run() { 
        int elapsedtime = mPlayerforplanet.getCurrentPosition(); 
        /* update UI with getCurrentPosition*/ 
       mHandler.postDelayed(mUpdateSeekBar, 1000); 
     } 
    }; 
+0

Я также использую seekbar и его тайминги, поэтому после игры из подготовленного слушателя «player.start()» не из myMediaPlayer, так как получить тайминги от медиаплеера? –

+0

ОК я стараюсь !! теперь .. thnk вы –

+0

bro мои тайминги я получаю !! медиаплеер, но поиск не работает с песней. можете ли вы рассказать мне, где я использую seek bar.on-change listenener? в подготовленном? или в Thread? –