2017-05-04 37 views
-3

我有一個關於android.I中的Service和BroadCast的問題,使用Alarm Reciver類(它是BroadCast的擴展類)創建一個Alarm Clock頁面,用於轉到RingtonePlaying Service類以啓動音樂。現在,我想要停止它,當點擊turn_off按鈕,但我不能這樣做。請幫我 感謝如何在android中停止播放服務

AlarmClock類:

private Button turn_on; 
public Button turn_off; 
private TextView update_text; 

Context context; 
AlarmManager alarm_manager; 
TimePicker time_picker; 
PendingIntent pending_intent; 

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_alarm_clock); 
    Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar); 
    setSupportActionBar(toolbar); 

    FloatingActionButton fab = (FloatingActionButton) findViewById(R.id.fab); 
    fab.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View view) { 
      Snackbar.make(view, "Replace with your own action", Snackbar.LENGTH_LONG) 
        .setAction("Action", null).show(); 
     } 
    }); 

    onButtonClickAlarm(); 

} 

private void onButtonClickAlarm() { 
    this.context=this; 

    turn_on=(Button)findViewById(R.id.alarm_on); 
    turn_off=(Button)findViewById(R.id.alarm_off); 
    update_text=(TextView)findViewById(R.id.update_text); 
    alarm_manager=(AlarmManager)getSystemService(ALARM_SERVICE); 
    time_picker=(TimePicker)findViewById(R.id.timePicker); 
    final Calendar calendar=Calendar.getInstance(); 
    final Intent my_intent=new Intent(this,AlarmReciever.class); 

    turn_on.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View view) { 
      update_text.setText("Alarm Turn On"); 

      calendar.set(Calendar.HOUR_OF_DAY,time_picker.getCurrentHour()); 
      pending_intent= PendingIntent.getBroadcast(AlarmClock.this,0,my_intent,PendingIntent.FLAG_UPDATE_CURRENT); 
      alarm_manager.set(AlarmManager.RTC_WAKEUP,calendar.getTimeInMillis(),pending_intent); 

     } 
    }); 

final RingtonPlayingService rington=new RingtonPlayingService(); 
    turn_off.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View view) { 
      update_text.setText("Alarm Turn Off"); 
     } 
    }); 
}} 

AlarmReciver類:

public class AlarmReciever extends BroadcastReceiver { 
AlarmClock alarmClock=new AlarmClock(); 

@Override 
public void onReceive(Context context, Intent intent) { 
    Log.e("AlarmReciever","Alarm Reciever Error"); 
    Intent intent_service=new Intent(context,RingtonPlayingService.class); 
    context.startService(intent_service); 
}} 

RingtonPlayingService:

public class RingtonPlayingService extends Service { 
public static MediaPlayer mediaPlayer; 


@Nullable 
@Override 
public IBinder onBind(Intent intent) { 
    return null; 
} 

@Override 
public int onStartCommand(Intent intent,int flags , int startId) { 



    if(mediaPlayer==null) 
    { 
     mediaPlayer = MediaPlayer.create(this, R.raw.relax); 
     mediaPlayer.start(); 
    } 
    return START_NOT_STICKY; 
} 

@Override 
public boolean onUnbind(Intent intent) { 
    mediaPlayer.stop(); 

    return super.onUnbind(intent); 
} 

@Override 
public void onDestroy() { 
    Toast.makeText(this, "onDestroy is Called", Toast.LENGTH_SHORT).show(); 
    mediaPlayer.stop(); 
}} 

回答

0

試試這個,停止服務

Intent inten = new Intent(getApplicationContext(), YourService.class); 
       stopService(inten); 
+0

如何取消服務:

Intent alarmIntent = new Intent(this, AlarmReceiver.class); pendingIntent = PendingIntent.getBroadcast(this, 0, alarmIntent, 0); manager = (AlarmManager)getSystemService(Context.ALARM_SERVICE); manager.cancel(pendingIntent); 
如果你想停止的服務,然後使用下面的代碼

? –

+0

使用此代碼後,您應關閉應用程序以啓動音樂,並且不會啓動音樂 –

0

如果你想啓動該服務,然後才取消報警使用下面的代碼:

Intent intent_service=new Intent(context,RingtonPlayingService.class); 
    stopService(intent_service); 
+0

停止代碼爲true,但取消代碼不正確。它劑量有螞蟻語法錯誤,但它不能做我的目標。 –