2013-12-18 24 views
2

你好計算器的好人,的Android /告警管理/特定的時間和日期

我想寫一個部分的應用程序在特定的時間和日期火災報警。理想情況下,它會開火,但如果警報能夠奏效,我幾乎會很開心。我嘗試了一些教程和示例,但沒有詳細解釋它(如果您知道某個網站請發送鏈接)。我想現在我有嘗試的混合。 這是應該收集時,報警器應下車信息,並啓動它的活動:

public class Activity_new_termin extends Activity { 

Button btnSelectDate,btnSelectTime, submit; 
EditText mTitle, mDescr; 
DatePicker pickerDate; 
TimePicker pickerTime; 

static final int DATE_DIALOG_ID = 0; 
static final int TIME_DIALOG_ID = 1; 
final static int RQS_1 = 1; 

public int year,month,day,hour,minute; 
private int mYear, mMonth, mDay,mHour,mMinute; 

private string date_name; 
private string descr; 

TextView info; 

public Activity_new_termin() 
{ 
      final Calendar c = Calendar.getInstance(); 
      mYear = c.get(Calendar.YEAR); 
      mMonth = c.get(Calendar.MONTH); 
      mDay = c.get(Calendar.DAY_OF_MONTH); 
      mHour = c.get(Calendar.HOUR_OF_DAY); 
      mMinute = c.get(Calendar.MINUTE); 
} 

@Override 
protected void onCreate(Bundle savedInstanceState) 
{ 
      super.onCreate(savedInstanceState); 
      setContentView(R.layout.activity_new_termin); 

      btnSelectDate=(Button)findViewById(R.id.buttonSelectDate); 
      btnSelectTime=(Button)findViewById(R.id.buttonSelectTime); 
      submit=(Button)findViewById(R.id.butt_submit_newdate); 
      mTitle=(EditText)findViewById(R.id.editText_datename_newdate); 
      mDescr=(EditText)findViewById(R.id.editText_datedescr_newdate); 

      btnSelectDate.setOnClickListener(new View.OnClickListener() { 

       public void onClick(View v) { 
         showDialog(DATE_DIALOG_ID); 
       } 
      }); 

      btnSelectTime.setOnClickListener(new View.OnClickListener() { 

       public void onClick(View v) { 
         showDialog(TIME_DIALOG_ID); 
       } 
      }); 

      submit.setOnClickListener(
         new View.OnClickListener() 
         { 
          public void onClick(View view) 
          { 

           Log.v("editText_datename_newdate", mTitle.getText().toString()); 
           Log.v("editText_datedescr_newdate", mDescr.getText().toString()); 

           Calendar current = Calendar.getInstance(); 

           Calendar cal = Calendar.getInstance(); 

           cal.set(Calendar.YEAR, year); 
           cal.set(Calendar.MONTH, month); 
           cal.set(Calendar.DAY_OF_MONTH, day); 
           cal.set(Calendar.HOUR_OF_DAY, hour); 
           cal.set(Calendar.MINUTE, minute); 
           cal.set(Calendar.SECOND, 0); 
           cal.set(Calendar.MILLISECOND, 0); 


           if(cal.compareTo(current) <= 0){ 

            Toast.makeText(getApplicationContext(), 
             "Invalid Date/Time", 
             Toast.LENGTH_LONG).show(); 
           }else{ 
           setAlarm(cal); 
           } 

          } 
         }); 
} 



    private DatePickerDialog.OnDateSetListener mDateSetListener = 
         new DatePickerDialog.OnDateSetListener() { 

          public void onDateSet(DatePicker view, int yearSelected, 
                int monthOfYear, int dayOfMonth) { 
           year = yearSelected; 
           month = monthOfYear; 
           day = dayOfMonth; 

           btnSelectDate.setText("Date selected : "+day+"-"+month+"-"+year); 
          } 
         }; 


         private TimePickerDialog.OnTimeSetListener mTimeSetListener = 
          new TimePickerDialog.OnTimeSetListener() { 

           public void onTimeSet(TimePicker view, int hourOfDay, int min) { 
            hour = hourOfDay; 
            minute = min; 

            btnSelectTime.setText("Time selected :"+hour+"-"+minute); 
            } 
          }; 

         @Override 
         protected Dialog onCreateDialog(int id) { 
          switch (id) { 
          case DATE_DIALOG_ID: 

           return new DatePickerDialog(this, 
              mDateSetListener, 
              mYear, mMonth, mDay); 

          case TIME_DIALOG_ID: 
           return new TimePickerDialog(this, 
             mTimeSetListener, mHour, mMinute, false); 

          } 
          return null; 
         } 

         private void setAlarm(Calendar targetCal){ 

           info.setText("\n\n***\n" 
           + "Alarm is [email protected] " + targetCal.getTime() + "\n" 
           + "***\n"); 

           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); 
          }       
} 

和XML:

<?xml version="1.0" encoding="utf-8"?> 
<ScrollView xmlns:android="http://schemas.android.com/apk/res/android" 
     android:layout_width="fill_parent" 
     android:layout_height="wrap_content" > 

<RelativeLayout 
android:layout_width="match_parent" 
android:layout_height="470dp" 
android:paddingBottom="@dimen/activity_vertical_margin" 
android:paddingLeft="@dimen/activity_horizontal_margin" 
android:paddingRight="@dimen/activity_horizontal_margin" 
android:paddingTop="@dimen/activity_vertical_margin" > 

<TextView 
    android:id="@+id/textview_title_newdate" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:layout_alignParentTop="true" 
    android:layout_centerHorizontal="true" 
    android:layout_marginTop="10dp" 
    android:text="@string/title_new_termin" /> 

    <EditText 
    android:id="@+id/editText_datename_newdate" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:layout_below="@+id/textview_title_newdate" 
    android:layout_centerHorizontal="true" 
    android:layout_marginTop="36dp" 
    android:ems="10" 
    android:inputType="textMultiLine" /> 

<EditText 
    android:id="@+id/editText_datedescr_newdate" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:layout_alignLeft="@+id/buttonSelectDate" 
    android:layout_below="@+id/buttonSelectTime" 
    android:layout_marginTop="27dp" 
    android:ems="10" > 

    <requestFocus /> 
</EditText> 

<Button 
    android:id="@+id/butt_submit_newdate" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:layout_alignLeft="@+id/textview_title_newdate" 
    android:layout_below="@+id/editText_datedescr_newdate" 
    android:layout_marginTop="38dp" 
    android:text="@string/butt_newdate_submit" /> 

<Button 
    android:id="@+id/buttonSelectDate" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:layout_below="@+id/editText_datename_newdate" 
    android:layout_centerHorizontal="true" 
    android:layout_marginTop="20dp" 
    android:text="Select Date" /> 

<Button 
    android:id="@+id/buttonSelectTime" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:layout_alignLeft="@+id/editText_datedescr_newdate" 
    android:layout_below="@+id/buttonSelectDate" 
    android:layout_marginTop="14dp" 
    android:text="Select Time" /> 

</RelativeLayout> 
</ScrollView> 

終於alarmreceiver:

import android.content.BroadcastReceiver; 
import android.content.Context; 
import android.content.Intent; 
import android.widget.Toast; 

public class AlarmReceiver extends BroadcastReceiver 
{ 
     @Override 
      public void onReceive(Context context, Intent intent) 
      { 

        // Show the toast like in above screen shot 
        Toast.makeText(context, "Alarm ausgelöst", Toast.LENGTH_LONG).show(); 


      } 

} 

非常感謝你提前!

+0

也許我應該提到的是它崩潰所有的時間使用它。 :-) – user3116188

+0

使用LogCat檢查與您的崩潰相關的Java堆棧跟蹤。 – CommonsWare

回答

1

我測試了你的代碼。你正在NullPointerExceptionTextView info;

你已經宣佈TextView info,但你從來沒有分配它,例如;

info = (TextView) findViewById(R.id.what_ever);

後,你可以爲你使用的是像

info.setText("\n\n***\n"+ "Alarm is [email protected] " + targetCal.getTime() + "\n" + "***\n");