2013-03-29 2 views
0

у меня есть андроид сервис, который играет music.i начать в моей основной деятельности с этим кодом:начинает деятельность останавливается андроид службы

Intent service = new Intent(MainMenu.this, musicservice.class); 
MainMenu.this.startService(service); 

и это моя служба:

public class musicservice extends Service { 
@Override 
public IBinder onBind(Intent arg0) { 
    return null; 
} 

@Override 
public int onStartCommand(Intent intent, int flags, int startId) { 
    super.onStartCommand(intent, flags, startId); 

    MediaPlayer mp; 
    mp = MediaPlayer.create(musicservice.this, R.raw.music); 
    mp.setOnCompletionListener(new OnCompletionListener() { 
     public void onCompletion(MediaPlayer mp) { 
      mp.release(); 
     } 
    }); 
    mp.start(); 

    return Service.START_STICKY; 
} 

@Override 
public void onDestroy() { 
    super.onDestroy(); 
} 

}

Это stsrts отлично работает, но когда я начинаю другое действие, моя музыка отключается и кажется, что мое служение разрушается! но не хочу этого, я хочу, чтобы мой сервис останавливался только после завершения моего приложения. музыка воспроизводится только тогда, когда пользователь работает с приложением. даже когда приложение в фоновом режиме я хочу, чтобы моя музыка не играла! как я могу это реализовать?

+0

Просто чтобы прояснить, вы хотите музыку, чтобы остановить воспроизведение, как только вы начинаете другой Мероприятия? Или вы хотите, чтобы он продолжал играть, когда вы начали другое действие? Я задаю этот вопрос из-за ответа, который вы дали TGMCians. Вначале я думал, что TGMCians неправильно понял ваш вопрос, но на основании вашего ответа на него - я уже не так уверен. –

ответ

0

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

Используйте AlarmManager, чтобы запланировать обслуживание повторно.

+0

, тогда я должен начать свое обслуживание откуда? – Fcoder

+0

Farhad, Предполагая, что вы действительно хотите, чтобы ваша музыка продолжала играть, когда началось другое мероприятие (это направление TGMCians идет, я думаю). Вы хотите начать отдельный поток из своей деятельности, который, в свою очередь, начнет работу с музыкальным сервисом из этого потока. Но чтобы пользователям было проще остановить эту музыку после того, как ваша активность перестала быть видимой, обычно разрешает пользователю останавливать музыку из области уведомлений под панелью состояния/панель действий и/или останавливать музыкальную службу когда пользователь отключает наушники. –

1

Если вы хотите, чтобы ваше приложение воспроизводило музыку во время вашей активности, попробуйте bind it.

это должно выглядеть примерно так:

Услуги:

package com.example.service; 

import android.app.Service; 
import android.content.Intent; 
import android.media.MediaPlayer; 
import android.media.MediaPlayer.OnCompletionListener; 
import android.os.Binder; 
import android.os.IBinder; 

import com.example.playmusic.R; 

public class PlayMusicService extends Service { 

    private final IBinder binder = new LocalBinder(); 

    private MediaPlayer player; 

    @Override 
    public IBinder onBind(Intent intent) { 
     return binder; 
    } 

    public class LocalBinder extends Binder { 

     public PlayMusicService getService() { 
      return PlayMusicService.this; 
     } 
    } 

    public void play() { 
     player = MediaPlayer.create(this, R.raw.music); 
     player.setOnCompletionListener(new OnCompletionListener() { 
      @Override 
      public void onCompletion(MediaPlayer mp) { 
       mp.release(); 
      } 
     }); 
     player.start(); 

    } 

    public void pause() { 
     player.pause(); 
    } 
} 

активность:

package com.example.playmusic; 

import android.app.Activity; 
import android.content.ComponentName; 
import android.content.Context; 
import android.content.Intent; 
import android.content.ServiceConnection; 
import android.os.Bundle; 
import android.os.IBinder; 

import com.example.service.PlayMusicService; 
import com.example.service.PlayMusicService.LocalBinder; 

public class MainActivity extends Activity { 

private PlayMusicService service; 

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

@Override 
protected void onPause() { 
    super.onPause(); 
    service.pause(); 
} 

@Override 
protected void onStart() { 
    super.onStart(); 
    if (service != null) { 
     service.play(); 
    } else { 
     bindService(); 
    } 
} 

    private void bindService() { 
     bindService(new Intent(this, PlayMusicService.class), new ServiceConnection() { 

      @Override 
      public void onServiceDisconnected(ComponentName name) { 
       service = null; 

      } 

      @Override 
      public void onServiceConnected(ComponentName name, IBinder binder) { 
       LocalBinder localBinder = (LocalBinder) binder; 
       service = localBinder.getService(); 
       service.play(); 

      } 
     }, Context.BIND_AUTO_CREATE); 
    } 

} 
Смежные вопросы