如何停止按钮点击事件的服务

时间:2014-01-27 07:49:27

标签: android service

我正在使用以下service在应用启动声音启动时以及当用户点击其停止的菜单中的任何button时在我的应用中播放声音。但我面临一些问题。就像用户打开应用程序而不按应用程序菜单中的任何button一样,他在移动声音上按菜单button不会停止。如果应用程序启动和呼叫或消息即将发布移动仍然在后台播放声音。如何在这两个事件上停止service

服务代码 -

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

然后在主菜单活动中,当用户按任意按钮时停止它 -

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();

请告诉我我必须做哪些更改?

4 个答案:

答案 0 :(得分:2)

您应该覆盖Activity的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
}

答案 1 :(得分: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));
    }
});

答案 2 :(得分:0)

关于第一期,您可以参考这篇文章,

Android service running after pressing Home key

对于第二个问题,您应该创建一个侦听来电的接收器。

并且在接收方的onReceive()方法中,您可以停止服务。

有关如何创建传入接收器的详细信息,请参阅this question

使用此功能,您可以在呼叫断开后再次启动服务。

答案 3 :(得分:0)

只需致电

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

这将停止您的服务