마스터Q&A 안드로이드는 안드로이드 개발자들의 질문과 답변을 위한 지식 커뮤니티 사이트입니다. 안드로이드펍에서 운영하고 있습니다. [사용법, 운영진]

멀티 타이머를 구현하려고 합니다 (우선 asynctask로 해보고 있는데요..)

0 추천
 private void setAlert(int time){
  final int t = time;
  AlertDialog.Builder alt_bid = new AlertDialog.Builder(getActivity());
  alt_bid.setMessage("Do you want to set a Timer?").setCancelable(false)
  .setPositiveButton("Yes", new DialogInterface.OnClickListener() {
   
   @Override
   public void onClick(DialogInterface dialog, int which) {
    new ProcessSetAlarmTask()
              .executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR, t);
    Toast.makeText(getActivity(), ""+t, Toast.LENGTH_SHORT).show();
    
   }
  }).setNegativeButton("No", new DialogInterface.OnClickListener() {
   
   @Override
   public void onClick(DialogInterface dialog, int which) {
    Toast.makeText(getActivity(), "Cancel", Toast.LENGTH_SHORT).show();
    dialog.cancel();
   }
  });
  
  AlertDialog alert = alt_bid.create();
  alert.setTitle("Title");
  alert.show();
 }
 
 
 @Override
 public void onClick(View v) {
  switch (v.getId()) {
  case R.id.btn_min1:
   setAlert(5);
   break;
  case R.id.btn_7:
   setAlert(10);
   break;
  default :
   Toast.makeText(getActivity(), "Error!", Toast.LENGTH_SHORT).show();
   break;
  }
 }
 
 private class ProcessSetAlarmTask extends AsyncTask<Integer, Void, Void> {
  @Override
  protected Void doInBackground(Integer... params) {
   int timer = params[0];
   boolean resultProc = setAlarm(timer);
   Looper.prepare();
   if (resultProc == true) {
    pHandler.sendEmptyMessage(0);
   } else {
    pHandler.sendEmptyMessage(1);
   }
   return null;
  }
 }

 private boolean setAlarm(int params) {
  try {
   AlarmManager alarm = (AlarmManager) getActivity().getSystemService(Context.ALARM_SERVICE);
   // 아래는 리시버에서 호출할 이름을 지정
   Intent intent = new Intent("com.example.small");
   PendingIntent pender = PendingIntent.getBroadcast(getActivity(), 0, intent, 0);
   Calendar calendar = Calendar.getInstance();
   calendar.setTimeInMillis(System.currentTimeMillis());
   calendar.add(Calendar.SECOND, params);
   alarm.set(AlarmManager.RTC_WAKEUP, calendar.getTimeInMillis(), pender);
   return true;
  } catch (Exception e) {
   e.printStackTrace();
  }
  return false;
 }
 
 Handler pHandler = new Handler() {
  public void handleMessage(Message msg) {
   if (msg.what == 0) { // 알람 설정 성공
   } else if (msg.what == 1) { // 알람 설정 실패
   }
  }
 };

안녕하세요 와왕초보개발자입니다.

다름이 아니라 멀티 타이머 앱을 구현하고 있는데요

AsyncTask를 이용해서 제 시간에 맞추어 푸쉬알림을 받는 앱입니다.

그런데 리시버를 이용 푸쉬 알림을 AsyncTask로 구현을 하는데 하나의 알림을 설정하고(예를 들어 5초 뒤)

또 다른 알림을 설정하면(10초 뒤) 두번째 걸로 리셋되어 알림이 한번만 울립니다 ㅠㅠ

저는 따로 쓰레드를 돌려 두번의 알림이 나오게 해보고 싶은데 말이죠 ㅠㅠ

많이 찾아 봤는데 해답이 나오지 않습니다 ㅠㅠ 제발 도와주세요~~

허접하지만 코드 첨부 합니당~

 

 

 

익명사용자 님이 2015년 7월 28일 질문

1개의 답변

0 추천
쓰레드말고 메시지를 이용해 보심 어떨까요? ^^

사용 방법은 쓰레드에서 핸들러를 사용하듯이 핸들러를 하나 만들어준다음 사용하면 됩니다.

 

Handler.removeMessages(int what)로 메시지 큐에 저장된 메시지들을 삭제할 수 있고,

Handler.sendEmptyMessageDelayed(int what, long delayMillis)나 Handler.sendMessageDelayed(Message msg, long delayMillis)메서드로 일정 시간 이후에 특정 작업을 처리하도록 하면 될 듯 합니다.
흰둥 님이 2015년 7월 29일 답변
감사합니다 멀티로 알람 울리게 해결 됬어용 그런데
핸들러로 좀 길게해서도 되는지 모르겠네요~ 예를들어 3일 후 알람같은경우에 말이죠~~ 모자란 저에게 귀한 시간내주셔서 답변해주셔서 정말 감사드립니다 !!
...