2014-02-22 7 views
0

백그라운드에서 재생되도록이 작업을 시도했습니다. 왜 나에게 잘 보이지 않는가? 나는 java/android 개발에 익숙하므로 누군가가 문제를 해결하고 뭔가 문제를 설명 할 수 있기를 바랍니다. 예, 지금까지 스트리밍을 받았지만 앱을 종료하면 음악 재생이 중단됩니다. 내가 PHP 등 이전 경험이 있기 때문에 위대한 일을해야한다고 생각합니다. 고마워;)백그라운드에서 내 앱 실행

패키지 com.beanie.samples.streaming; 당신이 중지를 요구하고 있기 때문에

import java.io.BufferedOutputStream; 
import java.io.File; 
import java.io.FileOutputStream; 
import java.io.IOException; 
import java.io.InputStream; 
import java.net.MalformedURLException; 
import java.net.URL; 
import java.net.URLConnection; 

import com.beanie.samples.streaming.R; 
import com.beanie.samples.streaming.MyService; 

import android.app.Activity; 
import android.app.IntentService; 
import android.app.Service; 
import android.content.Intent; 
import android.media.MediaPlayer; 
import android.media.MediaPlayer.OnBufferingUpdateListener; 
import android.media.MediaPlayer.OnPreparedListener; 
import android.os.Bundle; 
import android.os.Environment; 
import android.os.Handler; 
import android.os.HandlerThread; 
import android.os.IBinder; 
import android.os.Looper; 
import android.os.Message; 
import android.util.Log; 
import android.view.View; 
import android.view.View.OnClickListener; 
import android.widget.Button; 
import android.widget.ProgressBar; 
import android.widget.Toast; 

; 



public class HomeActivity extends Activity implements OnClickListener { 
     private static final String TAG = "MyServices"; 

    private final static String RADIO_STATION_URL = "http://195.154.237.162:8936/"; 

    private static final String START_STICKY = null; 
     Button buttonPlay, buttonStopPlay; 


     /** Called when the activity is first created. 
     * Keep this here all the application will stop working */ 
     @Override 
     public void onCreate(Bundle savedInstanceState) { 
      super.onCreate(savedInstanceState); 
      setContentView(R.layout.main); 

      initializeUIElements(); 

      initializeMediaPlayer(); 

      super.onCreate(savedInstanceState); 
      setContentView(R.layout.main); 

      buttonPlay = (Button) findViewById(R.id.buttonPlay); 
      buttonStopPlay = (Button) findViewById(R.id.buttonStopPlay); 

      buttonPlay.setOnClickListener(this); 
      buttonStopPlay.setOnClickListener(this); 





     } 





    private ProgressBar playSeekBar; 





    private MediaPlayer player; 

    private InputStream recordingStream; 

    private RecorderThread recorderThread; 

    private boolean isRecording = false; 







    private void initializeUIElements() { 

     playSeekBar = (ProgressBar) findViewById(R.id.progressBar1); 
     playSeekBar.setMax(100); 
     playSeekBar.setVisibility(View.INVISIBLE); 

     buttonPlay = (Button) findViewById(R.id.buttonPlay); 
     buttonPlay.setOnClickListener(this); 

     buttonStopPlay = (Button) findViewById(R.id.buttonStopPlay); 
     buttonStopPlay.setEnabled(false); 
     buttonStopPlay.setOnClickListener(this); 


    } 




    public void startPlaying() { 
     buttonStopPlay.setEnabled(true); 
     buttonPlay.setEnabled(false); 

     playSeekBar.setVisibility(View.VISIBLE); 

     player.prepareAsync(); 

     player.setOnPreparedListener(new OnPreparedListener() { 

      public void onPrepared(MediaPlayer mp) { 
       player.start(); 



      } 
     }); 

    } 





    public void onClick(View v) { 
     if (v == buttonPlay) { 

      Toast.makeText(this, "My Service Started", Toast.LENGTH_LONG).show(); 
      Log.d(TAG, "onClick: starting srvice"); 
      startService(new Intent(this, MyService.class)); 



     startPlaying(); 
    player.setLooping(false); // Set looping 












     } else if (v == buttonStopPlay) { 

      Log.d(TAG, "onClick: stopping srvice"); 
      stopService(new Intent(this, MyService.class)); 
      stopPlaying(); 

     } 
    } 




    private void stopPlaying() { 
     if (player.isPlaying()) { 
      player.stop(); 
      player.release(); 
      initializeMediaPlayer(); 
     } 

     buttonPlay.setEnabled(true); 
     buttonStopPlay.setEnabled(false); 
     playSeekBar.setVisibility(View.INVISIBLE); 

     stopRecording(); 
    } 

    private void initializeMediaPlayer() { 
     player = new MediaPlayer(); 
     try { 
      player.setDataSource(RADIO_STATION_URL); 
     } catch (IllegalArgumentException e) { 
      e.printStackTrace(); 
     } catch (IllegalStateException e) { 
      e.printStackTrace(); 
     } catch (IOException e) { 
      e.printStackTrace(); 
     } 

     player.setOnBufferingUpdateListener(new OnBufferingUpdateListener() { 

      public void onBufferingUpdate(MediaPlayer mp, int percent) { 
       playSeekBar.setSecondaryProgress(percent); 
       Log.i("Buffering", "" + percent); 
      } 
     }); 
    } 

    @Override 
    protected void onPause() { 
     super.onPause(); 
     if (player.isPlaying()) { 
      player.stop(); 
     } 
    } 

    private void startRecording() { 

     BufferedOutputStream writer = null; 
     try { 
      URL url = new URL(RADIO_STATION_URL); 
      URLConnection connection = url.openConnection(); 
      final String FOLDER_PATH = Environment.getExternalStorageDirectory().getAbsolutePath() 
        + File.separator + "Songs"; 

      File folder = new File(FOLDER_PATH); 
      if (!folder.exists()) { 
       folder.mkdir(); 
      } 

      writer = new BufferedOutputStream(new FileOutputStream(new File(FOLDER_PATH 
        + File.separator + "sample.mp3"))); 
      recordingStream = connection.getInputStream(); 

      final int BUFFER_SIZE = 100; 

      byte[] buffer = new byte[BUFFER_SIZE]; 

      while (recordingStream.read(buffer, 0, BUFFER_SIZE) != -1 && isRecording) { 
       writer.write(buffer, 0, BUFFER_SIZE); 
       writer.flush(); 
      } 

     } catch (MalformedURLException e) { 
      e.printStackTrace(); 
     } catch (IOException e) { 
      e.printStackTrace(); 
     } finally { 
      try { 
       recordingStream.close(); 
       writer.flush(); 
       writer.close(); 
      } catch (IOException e) { 
       e.printStackTrace(); 
      } 
     } 
    } 

    private void stopRecording() { 

     try { 
      isRecording = false; 
      if (recordingStream != null) { 
       recordingStream.close(); 
      } 
     } catch (IOException e) { 
      e.printStackTrace(); 
     } 
    } 

    private class RecorderThread extends Thread { 
     @Override 
     public void run() { 
      isRecording = true; 
      startRecording(); 
     } 

    }; 
} 
+0

사이에 통신 할 수 bound service을 사용해야합니다 http://developer.android를. co.kr/guide/components/services.html – Skynet

+0

Ok 이것을 보관하려면 무엇을 사용합니까? – user279297

+0

이 내용은 다음과 같습니다. http://stackoverflow.com/questions/21461191/alarmmanager-fires-alarms-at-wrong-time/21461246#21461246 및 이 : http://www.codeproject.com/Articles/258176/Adding-Background-Music-to-Android-App 당신을 도울 것입니다 – Skynet

답변

0
@Override 
protected void onPause() { 
    super.onPause(); 
    if (player.isPlaying()) { 
     player.stop(); 
    } 
} 

아니라, 그것을 중지하고 있습니다. activity이 백그라운드로 이동하면 일시 중지됩니다.

당신은 서비스에서 스트림 (즉, 문제없이 백그라운드에서 유지) 실행하고 활동 및 서비스 당신은 서비스를 사용할 필요가 http://developer.android.com/guide/components/bound-services.html

+0

어쨌든 나는 그 행을 제거하려고 시도하지 않았다는 것을 믿을 수 없습니다. 그 행이 어떻게되는지보고 바운드 방식을 확인합니다. 감사! – user279297

+0

감사합니다. 항상 기본적인 무언가가 그것을 고쳐 준다. – user279297

관련 문제