2014-01-27 4 views
1

Я использую следующий service, чтобы воспроизводить звук в своем приложении, когда запускается начало запуска приложения, и когда пользователь нажимает на любое button в меню своей остановки. Но я столкнулся с некоторыми проблемами. Например, если пользователь открывает приложение и не нажимая никаких button в меню приложения, он нажимает меню button на мобильный звук не останавливается. И если при запуске приложения и звонке или сообщении на мобильном телефоне все еще звучат в фоновом режиме. Как остановить service на этих 2 мероприятиях?Как остановить сервис при событии нажатия кнопки

Сервис code-

public class PlayAudio extends Service{ 
private static final String LOGCAT = null; 
MediaPlayer objPlayer; 

public void onCreate(){ 
super.onCreate(); 
Log.d(LOGCAT, "Service Started!"); 
objPlayer = MediaPlayer.create(this, R.raw.test); 
} 

public int onStartCommand(Intent intent, int flags, int startId){ 
objPlayer.start(); 
Log.d(LOGCAT, "Media Player started!"); 
if(objPlayer.isLooping() != true){ 
Log.d(LOGCAT, "Problem in Playing Audio"); 
} 
return 1; 
} 

public void onStop(){ 
objPlayer.stop(); 
objPlayer.release(); 
} 

public void onPause(){ 
objPlayer.stop(); 
objPlayer.release(); 
} 
public void onDestroy(){ 
objPlayer.stop(); 
objPlayer.release(); 
} 
@Override 
public IBinder onBind(Intent objIndent) { 
return null; 
} 
} 

Когда мое приложение начинается с заставки деятельности я начиная аудио как-

@Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.splash); 
     objIntent = new Intent(this, PlayAudio.class); 
     startService(objIntent); 
     new Handler().postDelayed(csRunnable2, 5000); 
     } 

Затем в основной деятельности меню остановки, когда пользователь нажимает любую Button-

hist = (Button) findViewById(R.id.hist); 
     hist.setOnClickListener(new OnClickListener() { 
      @Override 
      public void onClick(View arg0) { 
       objIntent = new Intent(MainActivity.this, PlayAudio.class); 
       stopService(objIntent); 
       startActivity(new Intent(MainActivity.this, History.class)); 
       finish(); 

И, пожалуйста, скажите мне, где я должен делать изменения?

+1

Метод Stopself(), называемый – DaxeshKhatri

+0

Вы также должны явно называть его нажатием кнопки. Где ты это сделал? Это ваш полный код, который вы опубликовали? – Saggy

ответ

2

Вы должны переопределить OnStop() и OnPause() методы вашей деятельности, как это:

@Override 
public void onStop() 
{ 
    super.onStop(); 
    stopService(new Intent(getApplicationContext(), YourService.class)); 
} 

@Override 
public void onPause() 
{ 
    super.onPause(); 
    stopService(new Intent(getApplicationContext(), YourService.class)); 
} 

Или

@Override 
public void onPause() 
{ 
    super.onPause(); 
    // send a message to service to set sound player on pause(using Handler) 
} 

@Override 
public void onResume() 
{ 
    super.onResume(); 
    // send a message to service to resume sound playing 
} 
+0

не работает. на нажатие клавиши «домой» все еще звучит. –

+0

попытаться переопределить метод onBackPressed() тоже: @Override общественного недействительными onBackPressed() { super.onBackPressed(); stopService (новое намерение (getApplicationContext(), YourService.class)); } – floyd

+0

все еще не работает. –

0

Для вашего первого вопроса, то вы можете обратиться к этому сообщению,

Android service running after pressing Home key

Для вашего второго вопроса, то необходимо создать приемник, который прослушивает для входящего вызова.

и в способе приемника onReceive() вы можете остановить обслуживание.

Для получения информации о том, как создать приемник, обратитесь к this question.

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

+0

ответ вы предоставляете для первой проблемы, не выглядящей хорошо. Как я chande мой код в это? –

0

просто позвоните

stopService(new Intent(getApplicationContext(), YourService.class)); 

это будет останавливает ваш сервис

+0

где добавить это? –

+0

, где вы хотите прекратить свое обслуживание? –

+0

прочитайте полный вопрос, тогда ответьте мне. –

1
start.setOnClickListener(new OnClickListener() { 

    @Override 
    public void onClick(View arg0) { 
     // TODO Auto-generated method stub 
     startService(new Intent(getApplicationContext(), MyService.class)); 
    } 
}); 

stop.setOnClickListener(new OnClickListener() { 

    @Override 
    public void onClick(View v) { 
     // TODO Auto-generated method stub 
     stopService(new Intent(getApplicationContext(), MyService.class)); 
    } 
}); 
Смежные вопросы