2014-02-26 149 views
-1

我正在開發一款應用程序,我每天都會安排時間表,例如每天會有6個時間表,但每天的時間都會有所不同,我已經預定了時間並在那裏進行了計時sqlite在一個表中,現在我想爲這些時間表發出警報,我應該怎麼做。 報警如星期天上午9:30,上午10點40分,上午11:00,下午12點,下午4點,下午5點,星期一早上7點,上午8點等。 我使用此代碼設置鬧鐘具體時間每週每天設置多個鬧鐘

calSet.set(Calendar.DAY_OF_WEEK, week); 
    calSet.set(Calendar.HOUR_OF_DAY, hour); 
    calSet.set(Calendar.MINUTE, minuts); 
    calSet.set(Calendar.SECOND, 0); 
    calSet.set(Calendar.MILLISECOND, 0); 

    alarmManager.set(AlarmManager.RTC_WAKEUP, 
      calSet.getTimeInMillis(), 1 * 60 * 60 * 1000, pendingIntent); 
+0

我在sqlite的保存時間字符串格式,小時,分鐘和格式(上午下午)有單獨的列,他們從微調選擇,我沒有使用時間選擇器。 – Rayyan

+0

但是不知道這段代碼在應用程序未打開時會發出警報,小時和分鐘來自sqlite數據庫, – Rayyan

+0

另外,我必須每天設置六個警報。 – Rayyan

回答

1

如果您不使用SQlite,那麼這很容易,您可以使用PendingIntent和不同的請求代碼。

PendingIntent pendingIntent = PendingIntent.getBroadcast(getBaseContext(), requestcode, intent, 0); 
requestcode+=1; 

我已經發布了3個使用這些類的類,您可以獲得您的任務。

SetAlarms.java類實際上設置報警

public class SetAlarms { 
     Context c; 
     String SaveStateVal; 

     public SetAlarms(Context c) { 
      this.c = c; 
     } 

     public void AlarmSet(int i, Calendar targetCal) { 
      Intent intent = new Intent(c, AlarmReciever.class); 
      PendingIntent pendingIntent = PendingIntent.getBroadcast(c, i, intent, 
        0); 
      AlarmManager alarmManager = (AlarmManager) c 
        .getSystemService(Context.ALARM_SERVICE); 
      alarmManager.set(AlarmManager.RTC_WAKEUP, targetCal.getTimeInMillis(), 
        pendingIntent); 

     } 
    } 

這是AlarmReciever.java當報警來那麼這將是調用

public class AlarmReciever extends BroadcastReceiver { 
    MediaPlayer mP; 

    @Override 
    public void onReceive(Context context, Intent intent) { 
     // /** Play sound */ 
     mP = MediaPlayer.create(context, R.raw.tn); 
     mP.start(); 

     // Show the toast like in above screen shot 
     Toast.makeText(context, "Congratulation Alarm is Triggered", 
       Toast.LENGTH_LONG).show(); 
    } 
} 

Mainactivity.java類您可以簡單地爲警報類提供值(時間),使用Timepacker您可以設置警報。

public class MainActivity extends Activity implements OnClickListener { 

    TimePickerDialog tPickerDialog; 
    SharedPreferences StatPref; 
    TextView tvtime, sttime; 
    Button setTim, getRec; 
    SetAlarms ar; 
    String str; 
    int Count = 1; 

    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.main); 
     StatPref = getSharedPreferences("mfile", Context.MODE_PRIVATE); 
     reference(); 
     tvtime.setText(getStr()); 
     setTim.setOnClickListener(this); 
     sttime.setOnClickListener(this); 
     getRec.setOnClickListener(this); 

    } 

    private void reference() { 
     ar = new SetAlarms(this); 
     sttime = (TextView) findViewById(R.id.sttime); 
     getRec = (Button) findViewById(R.id.updtTime); 
     tvtime = (TextView) findViewById(R.id.tim); 
     tvtime.setText(getStr()); 
     setTim = (Button) findViewById(R.id.sctime); 
    } 

    @Override 
    public void onClick(View v) { 
     switch (v.getId()) { 
     case R.id.sctime: 
      openTimePickerDialog(false); 
      tvtime.setText(getStr()); 
      break; 
     case R.id.sttime: 
      openTimePickerDialog(false); 
      break; 
     case R.id.updtTime: 
      tvtime.setText(getStr()); 
      break; 
     } 

    } 

    private void openTimePickerDialog(boolean is24r) { 
     Calendar calendar = Calendar.getInstance(); 

     tPickerDialog = new TimePickerDialog(MainActivity.this, 
       onTimeSetListener, calendar.get(Calendar.HOUR_OF_DAY), 
       calendar.get(Calendar.MINUTE), is24r); 
     tPickerDialog.setTitle("Set Alarm Time"); 
     tPickerDialog.show(); 
    } 

    OnTimeSetListener onTimeSetListener = new OnTimeSetListener() { 

     @Override 
     public void onTimeSet(TimePicker view, int hourOfDay, int minute) { 
      Calendar calNow = Calendar.getInstance(); 
      Calendar calSet = (Calendar) calNow.clone(); 

      calSet.set(Calendar.HOUR_OF_DAY, hourOfDay); 
      calSet.set(Calendar.MINUTE, minute); 
      calSet.set(Calendar.SECOND, 0); 
      calSet.set(Calendar.MILLISECOND, 0); 

      if (calSet.compareTo(calNow) <= 0) { 
       // Today Set time passed, count to tomorrow 
       calSet.add(Calendar.DATE, 1); 
      } 

      // setAlarm(calSet); 
      if (Count <= 6) { 
       ar.AlarmSet(Count, calSet); 
       str = "\n" + "Alarm " + Count + " Set " + calSet.getTime(); 
       Editor editrr = StatPref.edit(); 
       editrr.putString("ref" + Count, str); 
       editrr.commit(); 
       Count++; 
      } else { 
       Toast.makeText(
         MainActivity.this, 
         "Set 6 Alarms at Same Time Restart Your App", 
         Toast.LENGTH_SHORT).show(); 
      } 
     } 
    }; 

    private String getStr() { 
     str = StatPref.getString("ref1", ""); 
     str = str + "\n" + StatPref.getString("ref2", ""); 
     str = str + "\n" + StatPref.getString("ref3", ""); 
     str = str + "\n" + StatPref.getString("ref4", ""); 
     str = str + "\n" + StatPref.getString("ref5", ""); 
     str = str + "\n" + StatPref.getString("ref6", ""); 
     return str; 
    } 
} 

MainActivity.java類main.xml中,使用XML作爲佈局

<?xml version="1.0" encoding="UTF-8"?> 
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:orientation="vertical" 
    android:weightSum="100" > 

    <TextView 
     android:layout_width="fill_parent" 
     android:layout_height="wrap_content" 
     android:gravity="center" 
     android:text="Alarm Manager" 
     android:textAppearance="?android:attr/textAppearanceLarge" /> 

    <TextView 
     android:id="@+id/sttime" 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content" 
     android:layout_marginTop="20sp" 
     android:gravity="center" 
     android:text="Set Time" 
     android:textSize="20sp" /> 

    <LinearLayout 
     android:layout_width="wrap_content" 
     android:layout_height="220sp" 
     android:layout_gravity="center" 
     android:gravity="center" > 

     <TextView 
      android:id="@+id/tim" 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" /> 
    </LinearLayout> 

    <LinearLayout 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content" 
     android:layout_marginTop="25dp" 
     android:gravity="center" 
     android:orientation="horizontal" > 

     <Button 
      android:id="@+id/sctime" 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      android:onClick="scheduleAlarm" 
      android:text="Schedule Alarm" /> 

     <Button 
      android:id="@+id/updtTime" 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      android:text="Updated View" /> 
    </LinearLayout> 

</LinearLayout> 
+0

你救了我的一天很好 –

0

將報警時間保存在數據庫中。 不要設置重複報警,而只能設置一個。 當您的第一個警報被觸發時(當您通過broadcastreceiver收到警報事件時)查詢數據庫,並設置下一個警報。

所以這個想法很簡單 - 當你執行一個鬧鐘時,設置下一個鬧鐘。你必須實現邏輯如何找到下一個鬧鐘時間。

+0

感謝StarDust。基本上我不會重複報警,在我的應用程序中,用戶必須每天設置六次,並將保存在SQLITE中。然後在這些時間的基礎上每天觸發六個警報。 – Rayyan

+0

當一個鬧鐘被觸發時,進行一個sql查詢,獲得下一個鬧鐘時間,然後設置鬧鐘。 例如如果您在上午9點30分設置第一個鬧鐘,在上午9點30分觸發,請進行sql查詢,獲取下一個鬧鐘時間(上午10點40分)並設置下一個鬧鐘。 – StarDust

相關問題