2017-04-23 112 views
-2
//MainActivity 
public class MainActivity extends AppCompatActivity { 
    Button b1, b2, b3; 
    TextView t1, t2; 
    int date, month, year, hour, min; 
    Calendar calendar; 
    Date date1; 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_main); 
     b1 = (Button) findViewById(R.id.pt); 
     b2 = (Button) findViewById(R.id.pd); 
     b3 = (Button) findViewById(R.id.sa); 
     t1 = (TextView) findViewById(R.id.t1); 
     t2 = (TextView) findViewById(R.id.t2); 
     calendar = Calendar.getInstance(); 
     date = calendar.get(Calendar.DATE); 
     month = calendar.get(Calendar.MONTH); 
     year = calendar.get(Calendar.YEAR); 
     hour = calendar.get(Calendar.HOUR); 
     min = calendar.get(Calendar.MINUTE); 
     calendar.set(year, month, date); 
     b1.setOnClickListener(new View.OnClickListener() { 
      @Override 
      public void onClick(View view) { 
     TimePickerDialog.OnTimeSetListener onTimeSetListener = new         TimePickerDialog.OnTimeSetListener() { 
        @Override 
        public void onTimeSet(TimePicker timePicker, int i, int i1) { 
         t1.setText(i + " : " + i1); 
        } 
       }; 
       TimePickerDialog timePickerDialog = new TimePickerDialog(MainActivity.this, onTimeSetListener, 
         hour, min, false); 
       timePickerDialog.show(); 
      } 
     }); 
     b2.setOnClickListener(new View.OnClickListener() { 
      @Override 
      public void onClick(View view) { 
       final DatePickerDialog.OnDateSetListener onDateSetListener = new DatePickerDialog.OnDateSetListener() { 
        @Override 
        public void onDateSet(DatePicker datePicker, int i, int i1, int i2) { 
         t2.setText(i2 + "-" + (i1 + 1) + "-" + i); 
        } 
       }; 
       DatePickerDialog datePickerDialog = new DatePickerDialog(MainActivity.this, onDateSetListener, 
         year, month, date); 
       datePickerDialog.show(); 
      } 
     }); 
     b3.setOnClickListener(new View.OnClickListener() { 
      @Override 
      public void onClick(View view) { 
       TimePickerDialog.OnTimeSetListener onTimeSetListener1 = new TimePickerDialog.OnTimeSetListener() { 
        @Override 
        public void onTimeSet(TimePicker timePicker, int i, int i1) { 
         Calendar cal = calendar.getInstance(); 
         Calendar cal1 = (Calendar) cal.clone(); 
         cal1.set(Calendar.HOUR_OF_DAY, i); 
         cal1.set(Calendar.MINUTE, i1); 
         cal1.set(Calendar.SECOND, 0); 
         cal1.set(Calendar.MILLISECOND, 0); 
         if (cal1.compareTo(cal) <= 0) { 
          cal1.add(Calendar.DATE, 1); 
         } 
         Long time = cal1.getTimeInMillis(); 
         setAlarm(time); 
        } 
       }; 
       TimePickerDialog timePickerDialog1 = new TimePickerDialog(MainActivity.this, onTimeSetListener1, 
         hour, min, false); 
       timePickerDialog1.show(); 


     } 
      });} 
      public void setAlarm(Long targetcal){ 
      AlarmManager alarmManager =  (AlarmManager)getSystemService(ALARM_SERVICE); 
      Intent intent = new Intent(MainActivity.this, MyReciever1.class); 
       intent.putExtra("key", targetcal); 
      PendingIntent pendingIntent = PendingIntent.getActivity(MainActivity.this, 9, intent, 0); 
      alarmManager.set(AlarmManager.RTC_WAKEUP ,targetcal, pendingIntent); 
     } 
     } 
//MyReciever1 

public class MyReciever1 extends AppCompatActivity { 
    Vibrator vibrator; 
    Button b1, b2; 
    Long cal2; 
    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_my_reciever1); 
     vibrator = (Vibrator)getSystemService(VIBRATOR_SERVICE); 
     vibrator.vibrate(600000); 
     Intent intent1 = getIntent(); 
     cal2 = intent1.getLongExtra("key",0); 
     b1= (Button)findViewById(R.id.stop); 
     b1.setOnClickListener(new View.OnClickListener() { 
      @Override 
      public void onClick(View view) { 
       vibrator.cancel(); 
       finish(); 
      } 
     }); 
     b2 = (Button)findViewById(R.id.snooze); 
     b2.setOnClickListener(new View.OnClickListener() { 
      @Override 
      public void onClick(View view) { 
       MainActivity mainActivity = new MainActivity(); 
       vibrator.cancel(); 
       mainActivity.setAlarm(cal2+1000); 
       finish(); 
      } 
     }); 
    } 
} 

/我做了一个按钮,选取时间,一旦报警设置了另一个活动开辟了打盹按钮在android系统设置报警和停止按钮我停止工作,但在点击打盹应用程序崩溃/的Android闹钟应用

+0

你有一些崩溃信息? –

+0

E/AndroidRuntime:致命异常:主要 进程:practices.rajat.com.alarmdemo,PID:3006 java.lang.IllegalStateException:系统服务不可用于onCreate之前的活动() at android.app.Activity.getSystemService Activity.java:5035) at practices.rajat.com.alarmdemo.MainActivity.setAlarm(MainActivity.java:98) at practices.rajat.com.alarmdemo.MyReciever1 $ 2.onClick(MyReciever1.java:39) –

+0

studio is显示此消息 –

回答

0

问题是在此代码:

MainActivity mainActivity = new MainActivity(); 
vibrator.cancel(); 
mainActivity.setAlarm(cal2+1000); 
finish(); 

Activity.getSystemService()需要正确初始化上下文,你不能用一个活动的背景下,直到onCreate()

系统服务不可用onCreate()之前的活动。

用一个新标签创建一个Activity实例不会让你经历它应该的生命周期。

您可以通过设置捆绑包,使用Intent传递它,启动startActivity并最终在Activity中检查捆绑包值来启动您的Activity。