如何在android中停止后台运行服务?
我正在使用上述代码在mt onCreate()中启动服务 我只想在单击按钮更改活动时停止此服务如何在android中停止后台运行服务?,android,Android,我正在使用上述代码在mt onCreate()中启动服务 我只想在单击按钮更改活动时停止此服务 Intent svc=new Intent(BeapSoundActivity.this, BackgroundService.class); pendingIntent = PendingIntent.getService(BeapSoundActivity.this, 0, svc, 0); AlarmManager alarmManager = (A
Intent svc=new Intent(BeapSoundActivity.this, BackgroundService.class);
pendingIntent = PendingIntent.getService(BeapSoundActivity.this, 0, svc, 0);
AlarmManager alarmManager = (AlarmManager)getSystemService(ALARM_SERVICE);
Calendar calendar = Calendar.getInstance();
calendar.setTimeInMillis(System.currentTimeMillis());
calendar.add(Calendar.SECOND, 2);
alarmManager.setRepeating(AlarmManager.RTC_WAKEUP, calendar.getTimeInMillis(), 10*1000, pendingIntent);
但这对我不起作用
这是我的背景服务课
import org.apache.http.client.ClientProtocolException;
导入org.apache.http.client.ResponseHandler;
导入org.apache.http.client.methods.HttpGet;
导入org.apache.http.impl.client.BasicResponseHandler;
导入org.apache.http.impl.client.DefaultHttpClient;
导入org.json.JSONObject;
导入android.app.Service;
导入android.content.Context;
导入android.content.Intent;
导入android.media.AudioManager;
导入android.media.MediaPlayer;
导入android.media.ringtonemager;
导入android.net.Uri;
导入android.os.IBinder;
导入android.os.StrictMode;
导入android.util.Log;
公共类后台服务扩展服务{
//私有静态最终字符串标记=null;
//媒体播放器;
媒体播放器;
字符串响应;
int i=0;
静止的{
//StrictMode.ThreadPolicy policy=新建StrictMode.ThreadPolicy.Builder().permitAll().build();
StrictMode.setThreadPolicy(新的StrictMode.ThreadPolicy.Builder().permitAll().build());
}
@凌驾
公共IBinder onBind(意向){
//TODO自动生成的方法存根
返回null;
}
@凌驾
public void onCreate(){
super.onCreate();
mMediaPlayer=新媒体播放器();
Log.e(“Oncreate”、“Oncreate”);
}
公共int onStartCommand(Intent Intent、int标志、int startId){
//player.start();
Log.e(“Onstartcommand”、“Onstartcommand”);
pendingCount();
返回1;
}
公共无效启动(Intent Intent,int startId){
//做
//super.onStart(intent,startId);
Log.e(“Onstart”、“Onstart”);
//pendingCount();
}
公共IBinder onUnBind(意图arg0){
//做自动生成的方法
返回null;
}
公共void onStop(){
}
公共无效暂停(){
}
@凌驾
公共空间{
//player.stop();
//player.release();
}
@凌驾
public void onLowMemory(){
}
public void playSound(上下文上下文)抛出IllegalArgumentException、SecurityException、IllegalStateException、,
IOException{
Uri soundUri=RingtoneManager.getDefaultUri(RingtoneManager.TYPE_通知);
//mMediaPlayer=新媒体播放器();
setDataSource(上下文,soundUri);
最终AudioManager AudioManager=(AudioManager)context.getSystemService(context.AUDIO_服务);
如果(audioManager.getStreamVolume(audioManager.STREAM_报警)!=0){
mmediplayer.setAudioStreamType(AudioManager.STREAM_报警);
mmediplayer.setLooping(true);
mmediplayer.prepare();
mmediplayer.start();
}
}
公共无效挂起计数(){
DefaultHttpClient httpClient=新的DefaultHttpClient();
HttpGet post=新的HttpGet(“http://mybusinessapp2.testshell.net/api/Orders");
post.addHeader(“用户名”info@mybusinessapp.com");
post.addHeader(“密码”,“c7d7cdf598be88a21a477842ebfa5ca5”);
ResponseHandler resHandler=new BasicResponseHandler();
字符串post_response=null;
试一试{
post\u response=httpClient.execute(post,resHandler);
}捕获(客户端协议例外e){
//TODO自动生成的捕捉块
e、 printStackTrace();
}捕获(IOE异常){
//TODO自动生成的捕捉块
e、 printStackTrace();
}
Log.e(“resp”,事后响应);
试一试{
JSONObject jobject=新的JSONObject(后响应);
strResponse=jobject.getString(“计数”);
}
捕获(例外e){
e、 printStackTrace();
}
Log.e(“tv”、“BeapSoundActivity.pending_number”);
试试{
beapsundactivity.pending_number.setText(strResponse);
//int pending=Integer.parseInt(beapsundactivity.pending_number.getText().toString());
//Log.e(“计数器”,“待处理”);
}
捕获(NullPointerException e){
e、 printStackTrace();
}
int pending=Integer.parseInt(strResponse);
如果(挂起==0){
mmediplayer.stop();
mMediaPlayer=新媒体播放器();
}
如果(挂起>0){
试一试{
playSound(BackgroundService.this);
}捕获(IOE异常){
//TODO自动生成的捕捉块
e、 printStackTrace();
}
捕获(IllegalArgumentException e){
//TODO自动生成的捕捉块
e、 printStackTrace();
}捕获(安全异常e){
//TODO自动生成的捕捉块
e、 printStackTrace();
}捕获(非法状态){
//TODO自动生成的捕捉块
e、 printStackTrace();
}
}
}
}
请帮我解决这个问题
提前感谢您创建了一个警报,每10秒启动一次服务。你在停止服务之前取消了吗?(如果没有,请使用(AlarmManager)getSystemService(Context.ALARM\u SERVICE).cancel)您正在覆盖
onDestroy()
而不是调用super.onDestroy()
。。。我会调查的
I used this line in my Button Click
stopService(new Intent(BeapSoundActivity.this, BackgroundService.class));
import org.apache.http.client.ClientProtocolException;
import org.apache.http.client.ResponseHandler;
import org.apache.http.client.methods.HttpGet;
import org.apache.http.impl.client.BasicResponseHandler;
import org.apache.http.impl.client.DefaultHttpClient;
import org.json.JSONObject;
import android.app.Service;
import android.content.Context;
import android.content.Intent;
import android.media.AudioManager;
import android.media.MediaPlayer;
import android.media.RingtoneManager;
import android.net.Uri;
import android.os.IBinder;
import android.os.StrictMode;
import android.util.Log;
public class BackgroundService extends Service{
// private static final String TAG = null;
// MediaPlayer player;
MediaPlayer mMediaPlayer;
String strResponse;
int i=0;
static {
// StrictMode.ThreadPolicy policy = new StrictMode.ThreadPolicy.Builder().permitAll().build();
StrictMode.setThreadPolicy( new StrictMode.ThreadPolicy.Builder().permitAll().build());
}
@Override
public IBinder onBind(Intent intent) {
// TODO Auto-generated method stub
return null;
}
@Override
public void onCreate() {
super.onCreate();
mMediaPlayer = new MediaPlayer();
Log.e("Oncreate","oncreate");
}
public int onStartCommand(Intent intent, int flags, int startId) {
// player.start();
Log.e("Onstartcommand","onstartcommand");
pendingCount();
return 1;
}
public void onStart(Intent intent, int startId) {
// TO DO
// super.onStart(intent,startId);
Log.e("Onstart","onstart");
// pendingCount();
}
public IBinder onUnBind(Intent arg0) {
// TO DO Auto-generated method
return null;
}
public void onStop() {
}
public void onPause() {
}
@Override
public void onDestroy() {
// player.stop();
// player.release();
}
@Override
public void onLowMemory() {
}
public void playSound(Context context) throws IllegalArgumentException, SecurityException, IllegalStateException,
IOException {
Uri soundUri = RingtoneManager.getDefaultUri(RingtoneManager.TYPE_NOTIFICATION);
// mMediaPlayer = new MediaPlayer();
mMediaPlayer.setDataSource(context, soundUri);
final AudioManager audioManager = (AudioManager) context.getSystemService(Context.AUDIO_SERVICE);
if (audioManager.getStreamVolume(AudioManager.STREAM_ALARM) != 0) {
mMediaPlayer.setAudioStreamType(AudioManager.STREAM_ALARM);
mMediaPlayer.setLooping(true);
mMediaPlayer.prepare();
mMediaPlayer.start();
}
}
public void pendingCount(){
DefaultHttpClient httpClient = new DefaultHttpClient();
HttpGet post = new HttpGet("http://mybusinessapp2.testshell.net/api/Orders");
post.addHeader("UserName", "info@mybusinessapp.com");
post.addHeader("Password", "c7d7cdf598be88a21a477842ebfa5ca5");
ResponseHandler<String> resHandler = new BasicResponseHandler();
String post_response = null;
try {
post_response = httpClient.execute(post,resHandler);
} catch (ClientProtocolException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
Log.e("resp",post_response);
try{
JSONObject jobject=new JSONObject(post_response);
strResponse= jobject.getString("Count");
}
catch(Exception e){
e.printStackTrace();
}
Log.e("tv",""+BeapSoundActivity. pending_number);
try{
BeapSoundActivity. pending_number.setText(strResponse);
// int pending=Integer.parseInt(BeapSoundActivity.pending_number.getText().toString());
// Log.e("counter",""+pending);
}
catch(NullPointerException e){
e.printStackTrace();
}
int pending=Integer.parseInt( strResponse);
if(pending==0){
mMediaPlayer.stop();
mMediaPlayer = new MediaPlayer();
}
if(pending>0){
try {
playSound(BackgroundService.this);
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
catch (IllegalArgumentException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (SecurityException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IllegalStateException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
}