Ich habe Code Meine Aktivität wie unten:Android Abspielen von Musik im Hintergrund
public class Player extends Activity implements OnCompletionListener,
OnPreparedListener, OnErrorListener, OnBufferingUpdateListener, MusicFocusable {
private Boolean playState = false;
private String station = "http://38.101.19.5:9157";
public static final float DUCK_VOLUME = 0.1f;
private String artistName = null;
private String trackName = null;
private TextView artist;
private TextView track;
private TextView status;
private Button play;
enum AudioFocus {
NoFocusNoDuck, // we don't have audio focus, and can't duck
NoFocusCanDuck, // we don't have focus, but can play at a low volume
// ("ducking")
Focused // we have full audio focus
}
private AudioFocus mAudioFocus = AudioFocus.NoFocusNoDuck;
private MediaPlayer mPlayer = null;
private AndroidShoutcastLib shoutcast;
private AudioManager mAudioManager;
AudioFocusHelper mAudioFocusHelper = null;
Handler handler = new Handler();
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_player);
mAudioManager = (AudioManager) getSystemService(AUDIO_SERVICE);
// create the Audio Focus Helper, if the Audio Focus feature is
// available (SDK 8 or above)
if (android.os.Build.VERSION.SDK_INT >= 8) {
mAudioFocusHelper = new AudioFocusHelper(getApplicationContext(),
this);
}
else {
mAudioFocus = AudioFocus.Focused; // no focus feature, so we always "have" audio focus
}
status = (TextView) findViewById(R.id.status);
artist = (TextView) findViewById(R.id.artist);
artist.setSelected(true);
track = (TextView) findViewById(R.id.track);
track.setSelected(true);
play = (Button) findViewById(R.id.play);
play.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View btn) {
if (!playState) {
play.setText("Pause");
handler.postDelayed(handlePlayRequest, 300);
}
else {
play.setText("Play");
status.setText("Press Play");
handler.postDelayed(handlePlayRequest, 300);
}
}
});
shoutcast = new AndroidShoutcastLib();
try {
shoutcast.setShoutcastUrl(station);
} catch (InvalidStreamURLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
shoutcast.setOnMetadataChangedListener(new MetadataListener(){
@Override
public void OnMetadataChanged(Metadata item) {
artistName = item.artist;
trackName = item.track;
updateMeta();
}
});
setVolumeControlStream(AudioManager.STREAM_MUSIC);
}
public void onDestroy() {
super.onDestroy();
shoutcast = null;
handler.removeCallbacks(handlePlayRequest);
}
public void updateMeta() {
handler.post(new Runnable() {
@Override
public void run() {
// This gets executed on the UI thread so it can safely modify Views
artist.setText(artistName);
track.setText(trackName);
}
});
}
private final Runnable handlePlayRequest = new Runnable() {
public void run() {
if (playState) {
Log.d("Player", "Stop Called");
giveUpAudioFocus();
mPlayer.stop();
mPlayer.reset();
mPlayer.release();
shoutcast.stopStream();
mPlayer = null;
playState = false;
}
else {
Log.d("Player", "Play Called");
createMediaPlayer();
getAudioFocus();
try {
mPlayer.setDataSource(shoutcast.startStream());
} catch (IllegalArgumentException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (SecurityException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IllegalStateException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (MalformedURLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (InvalidStreamURLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
mPlayer.prepareAsync();
}
}
};
private void createMediaPlayer() {
mPlayer = new MediaPlayer();
// Make sure the media player will acquire a wake-lock while
// playing. If we don't do
// that, the CPU might go to sleep while the song is playing,
// causing playback to stop.
//
// Remember that to use this, we have to declare the
// android.permission.WAKE_LOCK
// permission in AndroidManifest.xml.
mPlayer.setWakeMode(getApplicationContext(),
PowerManager.PARTIAL_WAKE_LOCK);
// we want the media player to notify us when it's ready preparing,
// and when it's done
// playing:
mPlayer.setOnPreparedListener(this);
mPlayer.setOnCompletionListener(this);
mPlayer.setOnErrorListener(this);
}
private void startPlayer() {
mPlayer.setVolume(1.0f, 1.0f);
if (!mPlayer.isPlaying()) {
Log.d("Player", "Starting Playback");
mPlayer.start();
playState = true;
status.setText("Streaming");
}
}
private void getAudioFocus() {
if (mAudioFocus != AudioFocus.Focused && mAudioFocusHelper != null
&& mAudioFocusHelper.requestFocus())
mAudioFocus = AudioFocus.Focused;
}
private void giveUpAudioFocus() {
if (mAudioFocus == AudioFocus.Focused && mAudioFocusHelper != null
&& mAudioFocusHelper.abandonFocus())
mAudioFocus = AudioFocus.NoFocusNoDuck;
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.activity_player, menu);
return true;
}
@Override
public void onBufferingUpdate(MediaPlayer arg0, int arg1) {
// TODO Auto-generated method stub
}
@Override
public boolean onError(MediaPlayer mp, int what, int extra) {
playState = false;
handler.post(handlePlayRequest);
return false;
}
@Override
public void onPrepared(MediaPlayer arg0) {
startPlayer();
}
@Override
public void onCompletion(MediaPlayer arg0) {
// TODO Auto-generated method stub
}
@Override
public void onGainedAudioFocus() {
// TODO Auto-generated method stub
}
@Override
public void onLostAudioFocus(boolean canDuck) {
// TODO Auto-generated method stub
}
}
Meine Forderung ist es, diese Aktivität zu Service-Klasse zu konvertieren, habe ich versucht, aber nicht immer, weil ich neu bin auch auf Android wie neu zu programmieren,
Könnte irgendjemand helfen?
Aber für das, was Sie, dies konvertieren in Dienstklasse wollen RESON – Ramz
ich die Musik in Hintergrund spielen wollen – String