2012-09-19 241 views
2

我的問題:如何讓我的應用程序在特定時間執行某些操作?特別是在技術上沒有運行的情況下(這是可能的)。最佳實踐?事件監聽器?等...時間事件監聽器

擴展:我對Android開發很新穎。我想要構建一個調度應用程序,它可以在預定時間控制手機的某些功能。所以我們假設我在應用程序中安排從3點振鈴變爲振動,現在是2點。那麼如何在系統時間變爲3:00時捕獲系統時間來運行該更改?

我不確定是否有更多信息會有用。我只是試圖在開始開發之前設計它,所以我正在尋找最佳實踐,以及如何在應用程序在後臺運行或根本不運行時運行事件偵聽器(如果這是可能的)。

回答

4

您可以使用pendingIntentBroadCastReceiver這樣的:

Calendar cal = Calendar.getInstance(); 
Intent activate = new Intent(context, Alarm.class); 
AlarmManager alarms ; 
PendingIntent alarmIntent = PendingIntent.getBroadcast(context, 0, activate, 0); 
alarms = (AlarmManager) context.getSystemService(Context.ALARM_SERVICE); 
cal.set(Calendar.HOUR_OF_DAY, hour); 
cal.set(Calendar.MINUTE, minute); 
cal.set(Calendar.SECOND, 00); 
alarms.set(AlarmManager.RTC_WAKEUP, cal.getTimeInMillis(), alarmIntent); 

然後廣播接收器:

public class Alarm extends BroadcastReceiver { 

    @Override 
    public void onReceive(Context context, Intent intent) { 
     MediaPlayer mp = MediaPlayer.create(context, R.raw.ferry_sound); 
     mp.start(); 
     PowerManager pm = (PowerManager)  context.getSystemService(Context.POWER_SERVICE); 
     PowerManager.WakeLock wl = pm.newWakeLock(PowerManager.FULL_WAKE_LOCK, "My Tag"); 
     wl.acquire(); 
     Vibrator vibrator = (Vibrator) context.getSystemService(Context.VIBRATOR_SERVICE); 
     long[] s = { 0, 100, 10, 500, 10, 100, 0, 500, 10, 100, 10, 500 }; 
     vibrator.vibrate(s, -1); 
    } 
} 

不要忘了,包括你的AndroidManifest.xml這些權限:

.... 
<uses-permission android:name="android.permission.WAKE_LOCK"/> 
<uses-permission android:name="android.permission.VIBRATE"/> 
.... 

和應用程序中的廣播接收器陽離子標籤:

<receiver android:process=":remote" android:name="Alarm" /> 
0

不要忘記權限:

.... 
    <uses-permission android:name="android.permission.WAKE_LOCK"/> 
    <uses-permission android:name="android.permission.VIBRATE"/> 
    .... 
    AND broadcast receiver in application tag:   
    <receiver android:process=":remote" android:name="Alarm" /> 
    .... 

感謝