[안드로이드] 아이고 여러분 도와주세요 EditText 값 초기화좀 알려주십시요..
by 쪼지킹 | 11.06.29 02:47 | 8,399 hit
그렇게 아무렇지도 않게썼던 알람이 이렇게 저한테는 어려운것이네요.
카운트다운이 되는 알람입니다. 작성은 끝났고 조율단계인데요 질문드리겠습니다.



알람 초기화면입니다. 타임피커에 기본적으로 1분이 적용되어있습니다. 타임피커 밑에 에딧텍스트가 있는데
거기에 메모를 넣으면 알람이 울리는 순간 다이얼로그의 타이틀로 받아오는 것입니다.


메모를 11111로(첫번째라는뜻) 설정하고 "시작" 을누르면 위의 시계가 카운트다운타이머로, 시작버튼이 취소로 바뀌면서
카운트다운이 시작됩니다. 11111이란 메모는 추후에 시작을 누르는 순간 다른 이미지로 바뀌는 작업을 할예정입니다.
아무튼 시간이 지나고...


알람이 울리면서 다이얼로그가 뜨는데 타이틀로 그메모가 들어가있네요
알람이 울리는 순간 인텐트로 다음엑티비티를 호출하면 바로 음악과 다이얼로그가 뜨는 방식입니다.
메모는 인텐트에서 putExtra() 로 넘겼고요 getExtras()해서 넘어온 값을 다이얼로그 타이틀에 넣었습니다.
여기까지는 좋네요...

저확인버튼을 누르면 알람이 꺼지면서 음악도 꺼지고 맨처음 화면으로 되돌아 가는 인텐트를 넣었습니다.
즉..  알람설정 액티비티 -> 알람활성 액티비티 -> 알람설정 액티비티 입니다.
둘다 인텐트 처리문에는 setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP); 를 줬습니다.

이알람이 끝났죠? 그럼 어플을 끄지않은 상태에서 알람을 하나더 만들어볼께요


이번에는 메모를 22222로 입력해서 넣었습니다.



시간이 흐르고...


아~ 아~앍~~~ 타이틀은 그대로 11111 입니다.
그후로 33333 44444 55555 를 넣어봐도 계속 11111 만 나옵니다. 어플을 껐다가 켜야지만 가능하네요..

이런현상에 대해서 여러분은 어떻게 생각하시는지요?
에딧텍스트를 없애버리면 그만인 것이지만 해결을 못해서 없애고 싶지는 않네요..

아글구왜 타이머에 9시가 찍혀있는지 모르겠네요.. 저렇게 찍혀도 알람은 1분후에 울리던데..
1시간으로 설정하면 10시간 이리찍히고 한시간후에 알람이 울려요..ㅋ

염치없이 기나긴 소스덩어리를 바라는건 아닙니다.
그렇다면야 너무 감사하겠지만
단지 해결해봐야할 방향을 일러주신다면 그것도 너무 감사드립니다.
해서 맞든 아니든 확실하지않더라도 그냥 생각나는대로 답글달아주시면 제가 하나하나 해보도록 하겠습니다.

제생각에는 인텐트되면서 기존화면의 정보가 리셋이 안되는거같은데
해서 인텐트해주면서 인텐트문구앞에 finish(); 넣고 인텐트써주고
그래도안되서 인텐트쓰고 finish()넣어보고
인텐트문안에 FLAG 넣어보고 다이얼로그 확인버튼 누르면 다이얼로그의 타이틀을 null 로도해보고 해봤는데
절대 안먹힙니다.
만약 답변이 오기전에 제가먼저 해볼을 하게된다면 저번질문처럼 이글을 수정해서  해결방법을 올려놓겠습니다.
답변하시면 포인트 10을 을 드립니다.

쪼지킹 님의 개발 Q&A 최신글 [더보기]

질문답변 게시판에서 궁금한 사항을 해결하셨다면, 애써 답변해주신 분께 잘 되었다고 따뜻한 댓글 한마디 남겨주세요.
그리고 답변해주신 분의 글을 '추천' 해주세요.
추천받으신 분에게 1포인트가, 추천하신 분에게도 1포인트가 적립됩니다. ^^

by 하솜 2011.06.29 10:07
해당 값을 넘기고 받는 부분을 보고 싶네용~
분명 문제가 있을 것 같은데요?
 
 
추천 0 반대 0
by 덧없음 2011.06.29 10:40
로직을 보고싶네요.
절대 이유없이 그런 동작을 하진 않을테니까요 =ㅅ=
추천 0 반대 0
by q1212 2011.06.29 11:16
그냥 설명만으로는 Intent할 때 값 넘기고 받는 부분 로직에 문제가 있는거 같고요
자세한건 코드부분을 봐야 답이 나오겠죠? ^^;
윗분 말대로 이유없이 그러지는 않을 테니까요
컴터는 시키는 데로만 할뿐 ~_~
추천 0 반대 0
by croute 2011.06.29 13:19
코드를....
추천 0 반대 0
by 쪼지킹 2011.06.29 22:22
첫번째 알람메인 코드
 
package jihoon.jungin.mamazzang;
import java.util.GregorianCalendar;
import android.R.string;
import android.app.Activity;
import android.app.AlarmManager;
import android.app.PendingIntent;
import android.content.Context;
import android.content.Intent;
import android.os.Bundle;
import android.os.CountDownTimer;
import android.text.Editable;
import android.text.format.DateFormat;
import android.util.Log;
import android.view.View;
import android.view.View.OnClickListener;
import android.view.Window;
import android.widget.Button;
import android.widget.Chronometer;
import android.widget.EditText;
import android.widget.TextView;
import android.widget.TimePicker;
import android.widget.TimePicker.OnTimeChangedListener;

public class MamaZzang_Alarm_Main extends Activity implements OnTimeChangedListener {
 
 //알람매니저 변수선언
 private AlarmManager mama_alarmManager;
 //날짜얻어오기
 private GregorianCalendar calendar;
 //타임피커선언
 private TimePicker mama_alarm_Picker = null;
 
 //프레임레이아웃
 private View frameView_Clock , frameView_Chronometer, frameView_alarmStart, frameView_alarmCancle;
 
 //에딧텍스트
 EditText editText;
 
 @Override
 public void onCreate(Bundle savedInstanceState) {
  super.onCreate(savedInstanceState);
  // 타이틀 라벨 없애는 구문
  requestWindowFeature(Window.FEATURE_NO_TITLE);
  //리스너 등록
  setContentView(R.layout.mama_alarm_add);
  
  
  
  
  //일단 보이는 애들
  frameView_Clock = findViewById(R.id.analogClock1);
  frameView_Clock.setVisibility(View.VISIBLE);
  frameView_alarmStart=findViewById(R.id.mama_alarm_statrbutton);
  frameView_alarmStart.setVisibility(View.VISIBLE);
  
  
  //일단 안보이는 애들
  frameView_Chronometer =findViewById(R.id.countdownTV);
  frameView_Chronometer.setVisibility(View.INVISIBLE);
  frameView_alarmCancle = findViewById(R.id.mama_alarm_runnigCancleButton);
  frameView_alarmCancle.setVisibility(View.INVISIBLE);
  
  
  //알람매니저 취득
  mama_alarmManager = (AlarmManager)getSystemService(Context.ALARM_SERVICE);
  //날짜취득
  calendar = new GregorianCalendar();
  
  // 타임피커
  mama_alarm_Picker=(TimePicker)findViewById(R.id.mama_alarm_set_TimePicker);
  //am pm 없애기
  mama_alarm_Picker.setIs24HourView(true);
  //시간초기화
  mama_alarm_Picker.setCurrentHour(0);
  //mama_alarm_Picker.setCurrentHour(calendar.get(calendar.HOUR_OF_DAY));
  //분초기화
  mama_alarm_Picker.setCurrentMinute(1);
  //mama_alarm_Picker.setCurrentHour(calendar.get(calendar.MINUTE));
  //시간변경 감지
  mama_alarm_Picker.setOnTimeChangedListener(this);
  
  
  
  editText=(EditText)findViewById(R.id.mama_alarm_memo);

  

  
  //알람시작버튼
  Button mama_alarm_start_button=(Button)findViewById(R.id.mama_alarm_statrbutton);
  mama_alarm_start_button.setOnClickListener(new OnClickListener() {
   @Override
   public void onClick(View v) {
    frameView_Clock.setVisibility(View.INVISIBLE);
    frameView_Chronometer.setVisibility(View.VISIBLE);
    frameView_alarmStart.setVisibility(View.INVISIBLE);
    frameView_alarmCancle.setVisibility(View.VISIBLE);
    
    
    startAlarm();
    startCountDown();
   }
  });
  
  
  Button mama_alarm_running_cancle_button=(Button)findViewById(R.id.mama_alarm_runnigCancleButton);
  mama_alarm_running_cancle_button.setOnClickListener(new OnClickListener() {
   @Override
   public void onClick(View v) {
    frameView_Clock.setVisibility(View.VISIBLE);
    frameView_Chronometer.setVisibility(View.INVISIBLE);
    frameView_alarmStart.setVisibility(View.VISIBLE);
    frameView_alarmCancle.setVisibility(View.INVISIBLE);
    alarm_runnigCancle();
    
   }
  });
  
  
 } //onCreate 메소드 끝지점
 
 
 
 private class CountDownT extends CountDownTimer{
  
  public CountDownT(long millisInFuture, long countDownInterval) {
   super(millisInFuture, countDownInterval);
   
  }
  @Override
  public void onFinish() {
   // TODO Auto-generated method stub
    
  }
  @Override
  public void onTick(long millisUntilFinished) {
   TextView tv=(TextView)findViewById(R.id.countdownTV);
   long time= millisUntilFinished;//00:00:00
   long h  = time/3600;
   long m  = (time%3600)/60;
   long s = (time%3600)%60;
   
   //tv.setText(h+":"+m+":"+s);
   DateFormat df=new DateFormat();
   String str=df.format("kk:mm:ss", millisUntilFinished).toString();
   tv.setText(str);
  }
  
 }
 
 
 private void startCountDown() {
  
  CountDownT timer=new CountDownT(pickerTime, 1000);
  timer.start();
 }
 
// 
 long alarmTime=0;
 long pickerTime=0;
 //알람설정(깨워주는 작업을 MamaZzang_Alarm_Running 클래스로 PendingIntent
 protected void startAlarm() {
  Intent runnungIntent= new Intent();
  runnungIntent.setClass(getApplicationContext(), MamaZzang_Alarm_Running.class);
  runnungIntent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
  //인텐트에게 값을 넘겨줌
  runnungIntent.putExtra("memo",editText.getText().toString() );
  PendingIntent startPendingIntent = PendingIntent.getActivity(getApplicationContext(), 0,
    runnungIntent, 0);
  editText.setText(null);
  //타임피커에 입력된 시간을 밀리세컨드로 구하기
  int time =(mama_alarm_Picker.getCurrentHour())*60*60*1000;
  int min = (mama_alarm_Picker.getCurrentMinute())*60*1000;
  
  pickerTime = time+min;
  //현재시간과 입력시간을 합해서 알람타임으로 선언
  alarmTime=System.currentTimeMillis()+time+min;
  mama_alarmManager.set(AlarmManager.RTC_WAKEUP,
    alarmTime, startPendingIntent);
  editText.setSaveEnabled(false);
  
 
 }
 //시간설정 클래스의 상태 변화 리스너
 @Override
 public void onTimeChanged(TimePicker view, int hourOfDay, int minute) {
 }
 
}
 
추천 0 반대 0
by 쪼지킹 2011.06.29 22:22
두번째 알람다이어로그 코드
 

package jihoon.jungin.mamazzang;
import android.app.Activity;
import android.app.AlarmManager;
import android.app.AlertDialog;
import android.app.PendingIntent;
import android.content.Context;
import android.content.DialogInterface;
import android.content.Intent;
import android.media.MediaPlayer;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.view.View.OnClickListener;
import android.view.Window;
import android.widget.Button;
import android.widget.Chronometer;
import android.widget.EditText;
import android.widget.TextView;
import android.widget.Toast;

public class MamaZzang_Alarm_Running extends Activity{
 //알람매니저
 private AlarmManager mama_alarmManager;

 //음악을 틀어줄 미디어플레이어
 private MediaPlayer mama_alarm_mp;
 
 private String memo;
 

 @Override
 public void onCreate(Bundle savedInstanceState) {
  super.onCreate(savedInstanceState);
  
  // 타이틀 라벨 없애는 구문
  requestWindowFeature(Window.FEATURE_NO_TITLE);
  //메인페이지 설정
  setContentView(R.layout.mama_alarm_running);
  mama_alarmManager=(AlarmManager)getSystemService(Context.ALARM_SERVICE);
  mama_alarm_mp=new MediaPlayer();
  memo=(String)getIntent().getExtras().get("memo");
  try {

   mama_alarm_mp.setDataSource("/sdcard/when_harry_met_sally.mp3");
   mama_alarm_mp.prepare();
   mama_alarm_mp.start();
   
  }
  catch (Exception e) {
   mama_alarm_mp.release();
   mama_alarm_mp=null;
   Toast.makeText(getApplicationContext(), "에러", 3000).show();
  }

  
  AlertDialog.Builder alertDialog = new AlertDialog.Builder(MamaZzang_Alarm_Running.this);
  alertDialog.setIcon(R.drawable.alarm_clock_ico);
  alertDialog.setTitle(memo).toString();
  alertDialog.setMessage("시간이 됐어요");
  alertDialog.setCancelable(false);
  alertDialog.setPositiveButton("확 인", new DialogInterface.OnClickListener() {
   @Override
   public void onClick(DialogInterface dialog, int which) {
    
    //alarm cancle
    Intent intent=new Intent();
    intent.setClass(getApplicationContext(), MamaZzang_Alarm_Running.class);
    PendingIntent offPendingIntent=
     PendingIntent.getActivity(getApplicationContext(),
       0, intent, 0);
    mama_alarmManager.cancel(offPendingIntent);
    if(mama_alarm_mp!=null){
     mama_alarm_mp.stop(); 
    }
    
    //마마짱 알람메인으로 복귀
    Intent mama_alarm_off_Intent = new Intent();
    mama_alarm_off_Intent.setClass(getApplicationContext(), MamaZzang_Alarm_Main.class);
   mama_alarm_off_Intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
    startActivity(mama_alarm_off_Intent);
    
    finish();
    
   }
  });
  alertDialog.show();
  
  
  
 }

}
추천 0 반대 0
by q1212 2011.06.30 09:52
안바뀌는 문제는 FLAG_ACTIVITY_CLEAR_TOP때문에 그런거 같습니다.

startActivity대신에startActivityForResult 요놈을 써주세요.
추천 0 반대 0
by Hayanse 2011.06.30 11:24
흐암; 저는 문자가 가는걸로 만들고 있는데 문자 내용을 받아오는게 힘들군요 ㅠ
추천 0 반대 0
by 쪼지킹 2011.07.02 23:19
우선 시간이 9로 되어있는 이유는 GMT 때문이었음을 알아냈습니다.
일반알람이 아닌 카운트 다운타이머 만드시는 분들은 아마 저같은 현상을 겪지 않을까 싶은데요?
AlarmManager 클래스에 .setTimeZone 이라는 메소드가 있습니다. string형식의 id 를 파라메터로 넣어주어야하는데요?
한국같으면 파라메터에 ("AsiaSeoul") 로 주셔야겠지만 저는 00시로 셋팅을 해야하기때문에 ("GMT") ->국제 표준시로
주었습니다. 저도 한국이니까 한국시간설정을 해야한다는 고정관념에서 비롯된 실수가 몇일을 잡아먹었네요..
혹 시간은 분명 1분밖에 안줬는데 9시1분으로 설정되시는분들은 참고바랍니다. setTimeZone은 Calander DateFormat 등
시간과 관련된 여러클래스에도 나온답니다. 당연한거지만 저한테는 당연한게 아니거든요 ㅋ
추천 0 반대 0
by 사우람 2011.07.04 20:33
타임존은 일반 자바와 똑같습니다. 원래 시간/날짜 등은 유니크한 long값으로 저장되어 있고 보여줄때 변환만 해주는거니깐요....
추천 0 반대 0
안드로이드사이드 PC버전 로그인