2017-01-01 1 views
1

고정 된 날짜와 시간에 나에게 알람을 줄 안드로이드 앱을 만들고 싶습니다. 날짜에 대해 나는 텍스트 필드에서 시간을 가져 가기 위해 날짜 선택 도구와 시간 선택 도구를 사용했습니다. 다음과 같이 밀리 초 단위로 날짜와 시간을 병합했습니다.안드로이드의 고정 날짜와 시간에 알람 관리자

public void mergedt(){ 
    String myDate = textDate.getText().toString(); 
    String myTime = textTime.getText().toString(); 
    String toParse = myDate + " " + myTime; 
    // viewtext.setText(toParse + " "); 
    try { 
     SimpleDateFormat formatter = new SimpleDateFormat("dd-MM-yyyy hh:mm"); 
     Date date = formatter.parse(toParse); 
     millis = date.getTime(); 
     viewtext.setText(millis + ""); 
     //viewtext.setText(date + ""); 
    } catch (ParseException pe) { 
     pe.printStackTrace(); 
    } 
} 

내가 알람을 설정하려면

long milliseconds = new GregorianCalendar().getTimeInMillis(); 

에 따라 현재 날짜와 시간 (밀리 초)을 변환 한, 나는 코드 나는 알람을 설정

public void setAlarm(View view){ 
    long interval = millis - milliseconds; 
    long time = new GregorianCalendar().getTimeInMillis() + interval; 

    Intent intent = new Intent(this,AlarmReceiver.class); 
    AlarmManager alarm_Manager = (AlarmManager) getSystemService(Context.ALARM_SERVICE); 
    alarm_Manager.set(AlarmManager.RTC_WAKEUP,time, PendingIntent.getBroadcast(this, 1,intent, PendingIntent.FLAG_UPDATE_CURRENT)); 
} 

다음 사용하고, 그것은 보여줍니다 "경고"메시지는 즉시 고정 날짜와 시간에 알람을 표시하지 않습니다. 코드에 어떤 문제가 있으며 어떻게 해결할 수 있습니까?

+0

는 사용자가 입력 한 날짜가 현재 날짜 이후 당신의 확신? –

+0

네, 맞습니다. – rabiul

답변

0

당신은 선택기에서 날짜와 시간 값을 얻기 위해 노력하고있다, 그래서 당신은이 클래스를 사용할 수 밀리 초 . 시간과 날짜를 얻고 알람을 설정하십시오.

public class MainActivity extends AppCompatActivity { 


public static int alarmHour, alarmMin, alarmDay, alarmYear, alarmMonth; 
final static int RQS_1 = 1; 

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

} 

@Override 
public boolean onCreateOptionsMenu(Menu menu) { 
    // Inflate the menu; this adds items to the action bar if it is present. 
    getMenuInflater().inflate(R.menu.menu_main, menu); 
    return true; 
} 

@Override 
public boolean onOptionsItemSelected(MenuItem item) { 
    // Handle action bar item clicks here. The action bar will 
    // automatically handle clicks on the Home/Up button, so long 
    // as you specify a parent activity in AndroidManifest.xml. 
    int id = item.getItemId(); 

    //noinspection SimplifiableIfStatement 
    if (id == R.id.action_settings) { 
     return true; 
    } 

    return super.onOptionsItemSelected(item); 
} 

public void setDate(View view) { 
    DialogFragment newFragment = new DatePickerFragment(); 
    newFragment.show(getSupportFragmentManager(), "datePicker"); 
} 

public void setTime(View view) { 

    DialogFragment newFragment = new TimePickerFragment(); 
    newFragment.show(getSupportFragmentManager(), "timePicker"); 
} 


public void setAlarm(View view) { 
    Calendar calNow = Calendar.getInstance(); 
    Calendar calSet = (Calendar) calNow.clone(); 
    calSet.set(Calendar.HOUR_OF_DAY, alarmHour); 
    calSet.set(Calendar.MINUTE, alarmMin); 
    calSet.set(Calendar.DAY_OF_MONTH, alarmDay); 
    calSet.set(Calendar.YEAR, alarmYear); 
    calSet.set(Calendar.MONTH, alarmMonth); 

    setAlarmN(calSet); 
} 

private void setAlarmN(Calendar targetCal) { 

    Toast.makeText(this, "Alarm is set at" + targetCal.getTime(), 
      Toast.LENGTH_LONG).show(); 
    Intent intent = new Intent(getBaseContext(), AlarmReceiver.class); 
    PendingIntent pendingIntent = PendingIntent.getBroadcast(
      getBaseContext(), RQS_1, intent, 0); 
    AlarmManager alarmManager = (AlarmManager) getSystemService(Context.ALARM_SERVICE); 
    alarmManager.set(AlarmManager.RTC_WAKEUP, targetCal.getTimeInMillis(), 
      pendingIntent); 

} 

//date picker fragment 
public static class DatePickerFragment extends DialogFragment 
     implements DatePickerDialog.OnDateSetListener { 

    @Override 
    public Dialog onCreateDialog(Bundle savedInstanceState) { 
     // Use the current date as the default date in the picker 
     final Calendar c = Calendar.getInstance(); 
     int year = c.get(Calendar.YEAR); 
     int month = c.get(Calendar.MONTH); 
     int day = c.get(Calendar.DAY_OF_MONTH); 

     // Create a new instance of DatePickerDialog and return it 
     return new DatePickerDialog(getActivity(), this, year, month, day); 
    } 

    public void onDateSet(DatePicker view, int year, int month, int day) { 
     // Do something with the date chosen by the user 
     alarmDay = day; 
     alarmYear = year; 
     alarmMonth = month; 
    } 
} 

//Time picker fragment 
public static class TimePickerFragment extends DialogFragment 
     implements TimePickerDialog.OnTimeSetListener { 
    @Override 
    public Dialog onCreateDialog(Bundle savedInstanceState) { 
     // Use the current time as the default values for the picker 
     final Calendar c = Calendar.getInstance(); 
     int hour = c.get(Calendar.HOUR_OF_DAY); 
     int minute = c.get(Calendar.MINUTE); 

     // Create a new instance of TimePickerDialog and return it 
     return new TimePickerDialog(getActivity(), this, hour, minute, 
       DateFormat.is24HourFormat(getActivity())); 
    } 

    public void onTimeSet(TimePicker view, int hourOfDay, int minute) { 
     // Do something with the time chosen by the user 
     alarmHour = hourOfDay; 
     alarmMin = minute; 
    } 
} 


} 

전체 프로젝트 링크 : https://github.com/milon87/AlarmSpecificTime

+0

예. 작동 중입니다. – rabiul

0

이 시도 : 당신의 mergedt에()

try { 
    SimpleDateFormat formatter = new SimpleDateFormat("dd-MM-yyyy hh:mm a"); 
    Date date = formatter.parse(toParse); 
    // millis = date.getTime(); 
    Calendar calender_alarm.setTime(date); 
    millis=calender_alarm.getTimeInMillis(); 
    viewtext.setText(millis + ""); 
    //viewtext.setText(date + ""); 
} catch (ParseException pe) { 
    pe.printStackTrace(); 

}

얻기처럼 현재 시간 :에

 if (millis > current_time) { 
     //call setAlarm() method 
} 

:

Calendar calNow = Calendar.getInstance(); 
    long current_time = calNow.getTimeInMillis(); 

지금 알람 시간을 확인 귀하의 setAlarm() 메토 D 변화 :

alarm_Manager.set(AlarmManager.RTC_WAKEUP,time, PendingIntent.getBroadcast(this, 1,intent, PendingIntent.FLAG_UPDATE_CURRENT)); 

에 :

alarm_Manager.set(AlarmManager.RTC_WAKEUP,millis, PendingIntent.getBroadcast(this, 1,intent, PendingIntent.FLAG_UPDATE_CURRENT)); 

변화의 시간 value..to는

+0

@rabiul이 효과가 있습니까? – rafsanahmad007

관련 문제