2011-05-14 30 views
6

我想从我的应用程序创建闹钟对象。我正在写一个待办事项应用程序,它可以在手机上设置闹钟。从我的应用程序设置闹钟

我想设置日期和时间以及警报的标签。

Calendar c = Calendar.getInstance(); 
c.setTimeInMillis(System.currentTimeMillis()); 
     c.clear(); 
     c.set(Calendar.YEAR, mYear); 
     c.set(Calendar.MONTH, mMonth); 
     c.set(Calendar.DAY_OF_MONTH, mDay); 
     c.set(Calendar.HOUR, mHour); 
     c.set(Calendar.MINUTE, mMinute); 
     Intent activate = new Intent(this, alaram.class); 
     AlarmManager alarams ; 
     PendingIntent alarmIntent = PendingIntent.getBroadcast(this, 0, activate, 0); 
     alarams = (AlarmManager) getSystemService(this.ALARM_SERVICE); 
     alarams.set(AlarmManager.RTC_WAKEUP, c.getTimeInMillis(), alarmIntent); 

我试过使用上面的代码来设置闹钟,但我不能。我没有得到任何错误:(

+0

它需要的权限在manifest文件?因为我没有在logCat中得到任何错误,你可以指出我应该给予什么准许 – 2011-05-14 10:41:58

+0

如果你不设置年,月和日,此代码有效。也许在那里的问题。 – Sver 2011-05-14 10:47:37

+0

@Sver can not set date?报警? – 2011-05-14 10:53:07

回答

12

正如@stealthcopter所说,AlarmManager用于引发应用程序可以捕获的警报,然后执行某些操作。以下是我从其他帖子,教程和工作中扔出来的一个小例子我已经做到了。

Main.java

Intent i = new Intent(this, OnAlarmReceiver.class); 
PendingIntent pi = PendingIntent.getBroadcast(this, 0, i, 
                PendingIntent.FLAG_ONE_SHOT); 
Calendar calendar = Calendar.getInstance(); 
calendar.set(Calendar.SECOND, calendar.get(Calendar.SECOND) + 10); 
AlarmManager alarmManager = (AlarmManager) getSystemService(Context.ALARM_SERVICE); 
alarmManager.set(AlarmManager.RTC_WAKEUP, calendar.getTimeInMillis(), pi); 

OnAlarmReceiver.java

public class OnAlarmReceiver extends BroadcastReceiver{ 

@Override 
public void onReceive(Context context, Intent intent) { 
    WakeIntentService.acquireStaticLock(context); 
    Intent i = new Intent(context, AlarmService.class); 
    context.startService(i); 
}} 

WakeIntentService.java

public abstract class WakeIntentService extends IntentService { 

    abstract void doReminderWork(Intent intent); 

    public static final String LOCK_NAME_STATIC = "com.android.voodootv.static"; 
    private static PowerManager.WakeLock lockStatic = null; 

    public static void acquireStaticLock(Context context) { 
     getLock(context).acquire(); 
    } 

    synchronized private static PowerManager.WakeLock getLock(Context context) { 
     if (lockStatic == null) { 
      PowerManager powManager = (PowerManager) context 
        .getSystemService(Context.POWER_SERVICE); 
      lockStatic = powManager.newWakeLock(PowerManager.PARTIAL_WAKE_LOCK, 
        LOCK_NAME_STATIC); 
      lockStatic.setReferenceCounted(true); 
     } 
     return (lockStatic); 
    } 

    public WakeIntentService(String name) { 
     super(name); 
    } 

    @Override 
    final protected void onHandleIntent(Intent intent) { 
     try { 
      doReminderWork(intent); 
     } finally { 
      getLock(this).release(); 
     } 
    }} 

AlarmService.java

public class AlarmService extends WakeIntentService { 

    public AlarmService() { 
     super("AlarmService"); 
    } 

    @Override 
    void doReminderWork(Intent intent) { 
     NotificationManager manager = (NotificationManager) 
       getSystemService(NOTIFICATION_SERVICE); 
     Intent notificationIntent = new Intent(this, Main.class); 
     PendingIntent pi = PendingIntent.getActivity(this, 0, 
       notificationIntent, PendingIntent.FLAG_ONE_SHOT); 
     Notification note = new Notification(R.drawable.icon, "Alarm", 
       System.currentTimeMillis()); 
     note.setLatestEventInfo(this, "Title", "Text", pi); 
     note.defaults |= Notification.DEFAULT_ALL; 
     note.flags |= Notification.FLAG_AUTO_CANCEL; 
     int id = 123456789; 
     manager.notify(id, note); 
    } 
} 

这个例子将在10秒后创建在状态栏上的通知。

希望它有帮助。

也是第一篇文章在这里:)

哦差点忘了,

AndroidManifest.xml中

<receiver android:name="com.android.alarmmanagertest.OnAlarmReceiver" /> 
<service android:name="com.android.alarmmanagertest.AlarmService" /> 
<uses-permission android:name="android.permission.WAKE_LOCK" /> 
<uses-permission android:name="android.permission.VIBRATE" /> 
+1

了不起的第一篇文章。谢谢。 – 2013-05-10 05:19:04

+1

不要使用此代码它有很多错误,我浪费了我的时间 – 2015-01-07 16:23:06

0

这是工作代码:

加入的Manifest.xml:

... 
<uses-permission android:name="android.permission.WAKE_LOCK"></uses-permission> 
... 
<receiver android:process=":remote" android:name="Alarm"></receiver> 
... 

代码:

public class Alarm extends BroadcastReceiver 
{  
    @Override 
    public void onReceive(Context context, Intent intent) 
    { 
     PowerManager pm = (PowerManager) context.getSystemService(Context.POWER_SERVICE); 
     PowerManager.WakeLock wl = pm.newWakeLock(PowerManager.PARTIAL_WAKE_LOCK, "My Tag"); 
     wl.acquire(); 

     Toast.makeText(context, "Alarm !!!!!!!!!!", Toast.LENGTH_LONG).show(); 

     wl.release(); 
    } 

    public void SetAlarm(Context context) 
    { 
     AlarmManager am=(AlarmManager)context.getSystemService(Context.ALARM_SERVICE); 
     Intent i = new Intent(context, Alarm.class); 
     PendingIntent pi = PendingIntent.getBroadcast(context, 0, i, 0); 
     am.setRepeating(AlarmManager.RTC_WAKEUP, System.currentTimeMillis(), 1000 * 60 * 10, pi); 
    } 

    public void CancelAlarm(Context context) 
    { 
     Intent intent = new Intent(context, Alarm.class); 
     PendingIntent sender = PendingIntent.getBroadcast(context, 0, intent, 0); 
     AlarmManager alarmManager = (AlarmManager) context.getSystemService(Context.ALARM_SERVICE); 
     alarmManager.cancel(sender); 
    } 
} 
+1

对不起 - 为什么你在_AlarmManager_接收器中使用唤醒锁? – 2013-05-09 21:27:25