2017-03-02 50 views
1

我想在特定時間使用String start = "16:00";,開始另一項活動。如何在Android的每個特定時間啓動B類?

我必須使用String start = "16:00"

MainActivity.class

String start = "16:00"; 

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

    setAlarmTime(this); 
} 

private void setAlarmTime(Context context) { 
     String[] strStart = start.split(":") // delete ":" 

     Calendar cal_start = Calendar.getInstance(); 

     cal_start.set(Calendar.HOUR_OF_DAY, Integer.parseInt(strStart[0])); // hour 
     cal_start.set(Calendar.MINUTE, Integer.parseInt(strStart[1])); //minute 

     AlarmManager alarm = (AlarmManager) getSystemService(Context.ALARM_SERVICE); 
     Intent intent = new Intent(this, AlarmActivity.class); 
     PendingIntent pIntent = PendingIntent.getActivity(context, 0, intent, 0); 
     alarm.set(AlarmManager.RTC, cal_start.getTimeInMillis(), pIntent); 
} 

我想,而應用程序正在運行,當前時間4點鐘,開始AlarmActivity.class

但它不起作用。

如何在每個特定時間在Android上啓動另一個活動?

@Update

private void setAlarmTime(Context context) { 

    String[] strStart = start.split(":"); 

    Calendar cal_start = Calendar.getInstance(); 

    cal_start.set(Calendar.HOUR_OF_DAY, Integer.parseInt(strStart[0])); 
    cal_start.set(Calendar.MINUTE, Integer.parseInt(strStart[1])); 

    AlarmManager alarm = (AlarmManager) getSystemService(Context.ALARM_SERVICE); 
    Intent intent = new Intent(this, AlarmReceiver.class); 
    PendingIntent pendingIntent = PendingIntent.getActivity(this, 0, intent, 0); 

    alarm.set(AlarmManager.RTC_WAKEUP, cal_start.getTimeInMillis(), pendingIntent); 

這個源不起作用。 不工作alarmManager。

+0

。對? – curiousMind

+0

@curiousMind是的,但我必須使用'字符串開始=「16:00」;' – chohyunwook

回答

2

在應用程序代碼,請清單

​​

註冊您的接收器類添加此權限清單文件

 <receiver android:name=".AlarmActivity" /> 

拒收你的鬧鐘,將在特定的時間觸發AlarmActivity在喲烏爾情況下,其16:00

 Calendar calendar = Calendar.getInstance(); 
     calendar.set(Calendar.HOUR_OF_DAY, 16); 
     calendar.set(Calendar.MINUTE, 0); 
     calendar.set(Calendar.SECOND, 0); 

     Intent intent = new Intent(getApplicationContext(), AlarmActivity.class); 
     PendingIntent pendingIntent = PendingIntent.getBroadcast(getApplicationContext(), 100, intent, PendingIntent.FLAG_UPDATE_CURRENT); 
     AlarmManager alarmManager = (AlarmManager) getSystemService(ALARM_SERVICE); 
     alarmManager.setRepeating(AlarmManager.RTC_WAKEUP, calendar.getTimeInMillis(), AlarmManager.INTERVAL_DAY, pendingIntent); 

確保您的註冊類擴展了BroadcastReceiver這樣

 class AlarmActivity extends BroadcastReceiver { 

      @Override 
      public void onReceive(Context context, Intent intent) { 
        // Do whatever you want 
        // you can generate notifications here 
        // or can start your application activity you want 
      } 
     } 
要觸發4'o時鐘活動
+0

謝謝,這是工作,謝謝我錯過了添加權限。 – chohyunwook

2

如果您需要喚醒設備即使關閉,請考慮使用AlarmManager.RTC_WAKEUP。

alarm.set(AlarmManager.RTC_WAKEUP, cal_start.getTimeInMillis(), pIntent); 

AlarmManager.RTC不會喚醒設備。

參考:https://developer.android.com/reference/android/app/AlarmManager.html#RTC

順便說一句,你不需要通過上下文參考方法:

PendingIntent pIntent = PendingIntent.getActivity(this /*can use this as it is a context already */ , 0, intent, 0); 

更新: 請還設置了第二和cal_start的毫秒;否則它將是您獲取日曆實例的值。

cal_start.set(Calendar.SECOND, 0); 
cal_start.set(Calendar.MILLISECOND, 0); 

更新2: 它工作在我身邊,你可以嘗試添加

<uses-permission android:name="android.permission.WAKE_LOCK" /> 
在艙單

順便說一句,如果你想要這個報警每天重複

AlarmManager alarm = (AlarmManager) getSystemService(ALARM_SERVICE); 
alarm.setRepeating(AlarmManager.RTC_WAKEUP, cal_start.getTimeInMillis(), AlarmManager.INTERVAL_DAY, pIntent); 
+0

謝謝,但沒有工作。請檢查更新我的問題 – chohyunwook

+0

@chohyunwook請檢查我的更新,謝謝 – Alan

+0

哈..這不工作..也許使用AlarmManager需要權限? – chohyunwook

相關問題