2014-01-27 233 views
1

服務我使用下列service在我的應用程序播放聲音時,應用程序啓動的聲音開始,當在菜單中的任何button其停止用戶點擊。但我正面臨一些問題。如果用戶打開應用程序,並且在應用程序菜單中未按任何button,則按移動聲音上的菜單button不會停止。如果應用程序啓動並呼叫或消息來自移動靜音在後臺播放。如何在這2件事上停止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(); 

請告訴我,我必須做什麼改變?

+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 public void onBackPressed() { super.onBackPressed(); stopService(new Intent(getApplicationContext(),YourService.class)); } – floyd

+0

仍然無法正常工作。 –

0

爲了您的第一個問題,你可以參考這篇文章,

Android service running after pressing Home key

關於第二個問題,您應該創建一個接收器監聽來電。

,並在接收器的onReceive()方法,你可以停止該服務。

參考this question有關如何創建傳入接收器的詳細信息。

利用這一點,你可以一次性切斷呼叫後重新啓動該服務。

+0

答案你提供的第一個問題看起來不好。我如何篡改我的代碼? –

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