2011-06-17 74 views
2

我试图让闹钟工作,但它什么都不做,我在做什么? 我的代码是闹钟管理器不适用于我

 Calendar cal = Calendar.getInstance(); 
    Intent intent = new Intent(this, OnetimeAlarmReceiver.class); 
    PendingIntent sender = PendingIntent.getBroadcast(this, 0, intent, 0); 

    AlarmManager am = (AlarmManager) getSystemService(ALARM_SERVICE); 
    am.set(AlarmManager.RTC_WAKEUP, cal.getTimeInMillis() + 3000, sender); 

我的广播接收器看起来像这样

public class OnetimeAlarmReceiver extends BroadcastReceiver { 

    @Override 
    public void onReceive(Context context, Intent intent) { 
      Toast.makeText(context, "Alarm worked.", Toast.LENGTH_LONG).show(); 
    } 
} 

这是一个内部类。

我失踪了什么?

+0

它的更好,你移动OnetimeAlarmReceiver到外部类。它不工作,因为OnetimeAlarmReceiver(这是一个内部类,对吗?)不能实例化没有实例化父类。 – Vikram 2011-06-17 11:02:16

回答

7

您的广播接收器必须注册才能工作,它可以在AndroidManifest.xml中或动态使用Context.registerReceiver()方法来完成。

您可以阅读开发人员指南关于注册receviers statically或查阅参考资料以了解如何操作dynamically

+0

非常感谢你们俩。我把它移动到一个外部类中,并将它注册到清单中,现在它工作的很好。 – orel 2011-06-17 11:16:58

+2

很高兴帮助!那么你能接受答案吗? – Malcolm 2011-06-17 12:52:59

2

这是工作代码。

加入的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, "YOUR TAG"); 
     wl.acquire(); 

     // Put here YOUR code. 
     Toast.makeText(context, "Alarm !!!!!!!!!!", Toast.LENGTH_LONG).show(); // For example 

     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.set(AlarmManager.RTC_WAKEUP, System.currentTimeMillis() + (1000 * 60 * 10), pi); // Millisec * Second * Minute 
    } 
}