【问题标题】:How to stop service on button click event如何在按钮单击事件上停止服务
【发布时间】:2015-10-25 10:54:25
【问题描述】:

当应用程序启动声音开始时以及当用户单击菜单中的任何button 时,我正在使用以下service 在我的应用程序中播放声音停止。但我面临一些问题。就像用户打开应用程序并且没有在应用程序菜单中按任何 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();

请告诉我我必须在哪里进行更改?

【问题讨论】:

  • Stopself() 方法调用
  • 您也应该在单击按钮时显式调用它。你在哪里做的?这是您发布的完整代码吗?

标签: android service


【解决方案1】:

您应该像这样覆盖 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
}

【讨论】:

  • 也尝试覆盖 onBackPressed() 方法:@Override public void onBackPressed() { super.onBackPressed(); stopService(new Intent(getApplicationContext(), YourService.class)); }
  • 尝试做同样的事情,但是在 stopService(new Intent(getApplicationContext(), YourService.class)) 之后调用 super.onBackPressed();
【解决方案2】:
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));
    }
});

【讨论】:

    【解决方案3】:

    第一个问题可以参考这篇文章,

    Android service running after pressing Home key

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

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

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

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

    【讨论】:

    • 回答您提供的第一个问题看起来不太好。我如何将我的代码转换成那个?
    【解决方案4】:

    打个电话

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

    这将停止您的服务

    【讨论】:

    • 您想在哪里停止服务?
    猜你喜欢
    • 1970-01-01
    • 2022-11-21
    • 2018-10-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-11-23
    • 1970-01-01
    相关资源
    最近更新 更多