본문 바로가기

개인공부/안드로이드

안드로이드 alarm

알람앱 1회용 

전체소스. 필요하신분께선 마음대로 사용하세요!




import java.util.Calendar;

import java.util.Locale;


import android.app.AlarmManager;

import android.app.Dialog;

import android.app.PendingIntent;

import android.app.TimePickerDialog;

import android.content.Context;

import android.content.Intent;

import android.os.Bundle;

import android.support.v4.app.DialogFragment;

import android.support.v4.app.FragmentActivity;

import android.text.format.DateFormat;

import android.util.Log;

import android.view.View;

import android.view.View.OnClickListener;

import android.widget.Button;

import android.widget.TimePicker;

import android.widget.Toast;


public class MainActivity extends FragmentActivity {


private Calendar cal;

private int hour;

private int min;

private static Button alarmSetTextBt;

private Button alarmSetOnBt;

private Button alarmSetOffBt;

private long alarmtime;

@Override

protected void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

setContentView(R.layout.activity_main);

cal = Calendar.getInstance();

hour = cal.get(Calendar.HOUR_OF_DAY);

min = cal.get(Calendar.MINUTE);

alarmSetTextBt = (Button)findViewById(R.id.TimeSettingTextBt);

alarmSetTextBt.setOnClickListener(new OnClickListener() {

@Override

public void onClick(View v) {

// TODO Auto-generated method stub

DialogFragment newFragment = new TimePickerFragment();

newFragment.show(getSupportFragmentManager(),"TimePicker");

}

});

alarmSetOnBt = (Button)findViewById(R.id.alaermsetting_bt);

alarmSetOnBt.setOnClickListener(new OnClickListener() {

@Override

public void onClick(View v) {

// TODO Auto-generated method stub

AlarmManager alarmManager = (AlarmManager)getSystemService(Context.ALARM_SERVICE);

Intent intent = new Intent(getBaseContext(),ReceiveAlarm.class);

PendingIntent pIntent = PendingIntent.getActivity(getBaseContext(), 0, intent, 0);

calculateTime();

alarmManager.set(AlarmManager.RTC_WAKEUP, alarmtime,pIntent);

Calendar c = Calendar.getInstance();

c.setTimeInMillis(alarmtime);

Toast.makeText(getBaseContext(),c.get(Calendar.HOUR_OF_DAY)+"시"+c.get(Calendar.MINUTE)+"분에 알람이 울립니다.",Toast.LENGTH_SHORT).show();

}

});

alarmSetOffBt = (Button)findViewById(R.id.alaermsettingOff_bt);

alarmSetOffBt.setOnClickListener(new OnClickListener() {

@Override

public void onClick(View v) {

// TODO Auto-generated method stub

Intent intent = new Intent(getBaseContext(),ReceiveAlarm.class);

PendingIntent pIntent = PendingIntent.getActivity(getBaseContext(), 0, intent, 0); 

   AlarmManager manager = (AlarmManager)getBaseContext().getSystemService(Context.ALARM_SERVICE);

manager.cancel(pIntent);

}

});

}

private void calculateTime()

{

//알람시간을 milli값으로 나타내기

String time = alarmSetTextBt.getText().toString();

String temp = "";

int hour = -1,min = -1;

boolean a = false;

boolean isAm;

//hour와 min에 값넣기.

for(int i=0;i<time.length();i++) 

{

if(time.charAt(i) == ':')

{

//시간값 hour에 넣고

hour = Integer.parseInt(temp);

temp = "";

a = true;

continue;

}

if(time.charAt(i) == ' ' )

continue;

temp += time.charAt(i);

 

if(a == true && temp.length() == 2)

{

//분값 min에넣고

min = Integer.parseInt(temp);

break;

}

Log.d("msg",String.valueOf(time.charAt(i)));

}

Log.d("msg","설정시각" + hour + "시" + min +"분");

if(time.contains("AM") == true) {

isAm = true;

}

else {

isAm = false;

}

//mill로 저장된 알람시간  계산하기.

alarmtime = hour*1000*60*60;

alarmtime += min*1000*60;

//오후면

if(isAm == false)

alarmtime += 12*1000*60*60;

Log.d("msg", "alarmtime"+alarmtime);

//현재 시간을 milli값으로 나타내기

long milliTime = System.currentTimeMillis();

Calendar c = Calendar.getInstance();

c.setTimeInMillis(milliTime);

long nowTime;

hour = c.get(Calendar.HOUR_OF_DAY);

min = c.get(Calendar.MINUTE);

Log.d("msg","현재시각"+hour + "시" + min +"분");

nowTime = hour * 1000*60*60;

nowTime += min*1000*60;

Log.d("msg","nowtime" +nowTime);

//알람메니저에 시간을알려주는게 어떤시간값을 알려줘야하지.  흠. 

//최종 alarmTime계산  : 알람시간과 현재시간과의 관계

//알람시간이 현재시간보다 늦다면 알람시간-현재시간 후 울려야지

if(alarmtime >= nowTime)

{

alarmtime = alarmtime-nowTime;

}

else // 알람시간+24 - 현재시간

{

alarmtime = alarmtime+(1000*60*60*24) -nowTime;

}

//최종적으로 울리는 시간은 System.currentTimeMillis() +  alarmtime 인데, 여기서 system시간의 초부분은 빼자.

milliTime -= c.get(Calendar.SECOND)*1000;

Log.d("msg","초 : " + c.get(Calendar.SECOND)*1000 + "");

alarmtime += milliTime;

Log.d("msg","이시간이 지난 후 울립니다 : " + alarmtime + "");

}

public static class TimePickerFragment extends DialogFragment implements

  TimePickerDialog.OnTimeSetListener {

 public TimePickerFragment() {

 }

 

 public Dialog onCreateDialog(Bundle savedInstanceState) {

  final Calendar c = Calendar.getInstance();

  int hour = c.get(Calendar.HOUR_OF_DAY);

  int minute = c.get(Calendar.MINUTE);


  return new TimePickerDialog(getActivity(), this, hour, minute,

    DateFormat.is24HourFormat(getActivity()));

 }

 

@Override

public void onTimeSet(TimePicker view, int hourOfDay, int minute) {

// TODO Auto-generated method stub

Locale locale = getResources().getConfiguration().locale;

String time;

String am_pm;

if(hourOfDay > 12) {

time = String.format(locale,"%02d : %02d",hourOfDay - 12,minute);

am_pm = "PM";

} else {

time = String.format(locale,"%02d : %02d",hourOfDay,minute);

am_pm = "AM";

}

alarmSetTextBt.setText(time + " " + am_pm);

}


}

}

 

'개인공부 > 안드로이드' 카테고리의 다른 글

android alarmmanager.setRepeating  (0) 2014.01.03
alarm깨달은것  (0) 2014.01.03
android timepickerfragment  (0) 2014.01.03
android %02d  (0) 2014.01.03
android final  (0) 2014.01.03