2015-01-02 16 views
0

我使用SharePreference设置组闹钟。在整个每件事情都很好,但我想用btn_cancel取消警报,但事实并非如此(尽管我使用StopService,但没有任何事情发生!)。请帮我,我该怎么办?如何在Android中为此Intent使用StopService?

public class MyActivity extends Activity implements View.OnClickListener { 

private static final String SHARED_PREFERENCES_NAME = "ALARM_NOTIFICATION"; 
public static final String REQUEST_CODE = "REQUEST_CODE"; 
public static final String TIME = "TIME"; 
public static final String ALARM_1_NAME = "ALARM_1"; 
public static final String ALARM_NAME = "ALARM_NAME"; 

public static TextView text1; 
private Button set1; 

public static long timer1 = 0; 
private int requestCode = 0; 
private Intent intent1 = null; 
@Override 
public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.main); 

    set1 = (Button) findViewById(R.id.btn_set1); 
    alarmLinear = (LinearLayout) findViewById(R.id.alarmLayout); 
    text1 = (TextView) findViewById(R.id.add1); 

    set1.setOnClickListener(this); 
    text1.setOnClickListener(this); 
    findViewById(R.id.btn_cancle1).setOnClickListener(this); 

} 

@Override 
public void onClick(View view) { 
    switch (view.getId()) { 
     case R.id.add1: { 
      set1.setVisibility(View.VISIBLE); 

      if (timer1 == 0) { 
       timer1 = getCurrentTime(); 
      } // get time from system 
      Calendar calendar = Calendar.getInstance(); 
      calendar.setTimeInMillis(timer1); //set time in timer parametr 

      TimePicker timePicker = (TimePicker) findViewById(R.id.tp_1); 
      timePicker.setCurrentHour(calendar.get(Calendar.HOUR_OF_DAY)); 
      timePicker.setCurrentMinute(calendar.get(Calendar.MINUTE)); 



      break; 
     } 
     case R.id.btn_set1: { 
      TimePicker timePicker = (TimePicker) findViewById(R.id.tp_1); 
      Calendar calendar = Calendar.getInstance(); 
      calendar.set(Calendar.HOUR_OF_DAY, timePicker.getCurrentHour()); 
      calendar.set(Calendar.MINUTE, timePicker.getCurrentMinute()); 
      calendar.set(Calendar.SECOND, 0); 
      timer1 = calendar.getTimeInMillis(); 

      String stringTime = convertTimeToString(timer1); 
      text1.setText(stringTime); 

      if (intent1 == null) { 
       intent1 = new Intent(this, alarmService.class); 
       intent1.putExtra(ALARM_NAME , ALARM_1_NAME); 
      } 
      requestCode++; 
      intent1.putExtra(REQUEST_CODE, requestCode); 
      intent1.putExtra(TIME, timer1); 
      startService(intent1); 
      break; 
     } 
     case R.id.btn_cancle1: 
      cancelTimers(); 
      break; 

    } 
} 

private long getCurrentTime() { 
    Calendar calendar = GregorianCalendar.getInstance(); 
    return calendar.getTimeInMillis(); 
} 


private void cancelTimers() { 
    if (intent1 != null) { 
     timer1 = 0; 
     stopService(intent1); 
     text1.setText("+"); 
    } 
} 

这AlarmService()类:

public class alarmService extends Service { 
@Override 
public IBinder onBind(Intent intent) { 
    throw new UnsupportedOperationException("Not yet implemented"); 
} 

public int onStartCommand(Intent intent, int flags, int startId) { 
    if (intent == null) { 
     stopSelf(); 


    } else { 
     String alarmName = intent.getExtras().getString(MyActivity.ALARM_NAME); 
     Intent alarm = new Intent(this, alarm.class); 
     alarm.putExtra(MyActivity.ALARM_NAME,alarmName); 

     int requestCode = intent.getExtras().getInt(MyActivity.REQUEST_CODE); 
     long time = intent.getExtras().getLong(MyActivity.TIME); 

     PendingIntent pendingIntent1 = PendingIntent.getBroadcast(this, requestCode, alarm, 
       PendingIntent.FLAG_UPDATE_CURRENT); 

     AlarmManager alarmManager = (AlarmManager) getSystemService(ALARM_SERVICE); 
     long currentRTC = System.currentTimeMillis(); 
     if (currentRTC <= time) { 
      alarmManager.set(AlarmManager.RTC, time, pendingIntent1); 
     } 

    } 
    return START_STICKY; 
} 

}

感谢。

回答

1

这里我们通过调用报警服务来取消报警管理器发出的报警。然后,我们将结果放入通过报警管理器访问的结果中,并应用取消

Intent intent = new Intent(this, AlarmService.class); 
PendingIntent pendingIntent = 
    PendingIntent.getBroadcast(getApplicationContext(), 1253, intent, 0); 
AlarmManager alarmManager = (AlarmManager) getSystemService(ALARM_SERVICE); 
alarmManager.cancel(pendingIntent); 
+0

这将是巨大的,如果你能解释一下,你在这里做什么。 – blalasaadri

+1

这里我们通过呼叫报警服务器来取消报警管理器的报警,并将报警服务器通过报警管理器置于待处理意图中,并申请取消 –

+0

谢谢,我想用此代码设置报警并对其进行管理(re - 设置和取消)由用户。我的问题是取消BTN和如何取消这一过程。 –

1
 private void cancelTimers() { 
     if (intent1 != null) { 
      timer1 = 0; 
      intent1 = null; 
      stopService(intent1); 
      text1.setText("+"); 
     } 
    } 

改变这种代码

+0

它不起作用。应用程序已停止 –

1

stopService犯规停止正在进行的报警必须停止这样

AlarmManager alarmManager = (AlarmManager) getSystemService(ALARM_SERVICE); 
alarmManager.cancel(pendingIntent); 
+0

谢谢,你的意思是我在MyActivity类的btn_cancel中使用此代码? –

+0

是的,一旦与这 – KomalG

+0

检查我介绍alarmManager在btn_set并取消它在btn_cancel。但它不是intent1 –

相关问题