2014-02-22 24 views
0

我试图使其在后台播放得到这个工作?为什么它不工作,对我来说看起来不错? 我是新来的Java/Android的发展,希望有人能解决这个问题,并解释我的问题是什么,所以我可以学到一些东西 是的,我得到了它迄今流,但一旦你退出该应用程序的音乐停止播放 为是新的认为我做得很好必须是因为我有以前的经验与PHP等。 谢谢;)运行我的应用在后台

package 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

您需要使用服务之间进行通信:http://developer.android。 COM /引导/组件/ services.html – Skynet

+0

好 我会用什么来归档此 – 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被切换到后台将暂停。

您应该运行从服务流(即停留在没有问题的背景),并使用bound service活动和服务http://developer.android.com/guide/components/bound-services.html

+0

我不能相信我没有看到那个笑话我试着去掉那条线,看看结果如何,我检查出绑定的方法 谢谢! – user279297

+0

感谢这工作!总是有一些基本修复它大声笑.. – user279297