Intereting Posts
Cacerts.bks не существует Android Fabric TwitterCore логин без TwitterLoginButton Истекает ли идентификатор регистрации GCM? Android и Google App Engine: поддерживается поддерживающий XML-инструмент? Плохое качество звука при записи / воспроизведении звука – Android SDK Android Studio Не удалось вызвать IncrementalTask.taskAction () для задачи ': project: dexDebug' Как установить текстовое оформление в файле манифеста Android? Проблемы с качеством при изменении размера изображения во время выполнения Android HttpResponse всегда умирает во второй раз, когда он называется Android многопользовательская игра в реальном времени, какой лучший протокол / связь? Android Webview, настройка Long Click включена исключительно для ссылок? Android: SeekBar onProgressChanged-event не запускается при настройке прогресса программно Как изменить состояние переключателя мобильных jquery мобильных устройств из кода Операторы RxJava Кэширование изображений gridview для Android, на прокручиваемых изображениях повторяется перед заменой

Android играет музыку в фоновом режиме

У меня есть код моей активности, как показано ниже:

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

Мое требование состоит в том, чтобы преобразовать эту активность в класс обслуживания, я пытался, но не получаю, потому что я новичок в Android, а также новичок в программировании,

Может ли кто-нибудь помочь?

Solutions Collecting From Web of "Android играет музыку в фоновом режиме"

Если вам просто нужно воспроизвести музыку в своем приложении, сыграйте ее в потоке, запущенном из вашего приложения, или используйте класс AsyncTask, чтобы сделать это за вас.

Используйте этот код. Добавьте этот класс (включено в ваш класс активности).

 public class BackgroundSound extends AsyncTask<Void, Void, Void> { @Override protected Void doInBackground(Void... params) { MediaPlayer player = MediaPlayer.create(YourActivity.this, R.raw.test_cbr); player.setLooping(true); // Set looping player.setVolume(100,100); player.start(); return null; } } 

С другой стороны, если вы хотите использовать услугу, вы можете посмотреть эту страницу .

Несколько шагов, чтобы следовать …..

1. Сначала рассмотрим примеры обслуживания.

2. Из этого действия запускается сервис, т. Е. Всякий раз, когда это приложение открывает навигационную активность для обслуживания активности —-> службы.

3. В сервисе override onstart ().

4. В onstart () создайте функцию musicplayer и выберите нужную песню.

5. И начните как mp.play ();

6. Теперь он будет работать на фоне

Прежде всего, убедитесь, что вы понимаете, почему использовать Сервис, а не AsyncTask. Это действительно полезно для того же самого и показывает, почему вы должны использовать Сервис вместо AsyncTask для воспроизведения музыки в фоновом режиме.

Это будет очень удобно для вас. Он ясно показывает, как использовать Службу для воспроизведения музыки в фоновом режиме.