0

我正在尝试制作警报程序。到目前为止,我已经编写了一个活动,用户可以在其中选择他希望闹钟响起的时间。这工作正常。现在我需要使用警报管理器来告诉操作系统在将来的某个时间点调用我的一些代码。为了以粗略的方式测试这一点,我添加了以下代码,当我在主要活动中按下测试按钮时会执行该代码:

Intent intent = new Intent(getApplicationContext(), to_call_when_alarm_goes_off.class);
PendingIntent pIntent = PendingIntent.getBroadcast(getApplicationContext(),0, intent, 0);
AlarmManager alarms = (AlarmManager) getSystemService(Context.ALARM_SERVICE);
alarms.cancel(pIntent);

alarms.setRepeating(
        AlarmManager.RTC_WAKEUP,
        System.currentTimeMillis()+1000, 
        AlarmManager.INTERVAL_DAY, 
        pIntent);

这应该意味着一些名为 to_call_when_alarm_goes_off 的代码将在我按下按钮后一秒钟被执行......现在这是我有点困惑的地方。我不太确定如何/在哪里设置“to_call_when_alarm_goes_off”。我所做的只是在我的项目中添加一个新类,如下所示:

package com.mycompany.alarmprogram;

import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.util.Log;

public class to_call_when_alarm_goes_off extends BroadcastReceiver
{

    @Override
    public void onReceive(Context arg0, Intent arg1) 
    {
        // TODO Auto-generated method stub
        Log.i("ALARM","TIME TO WAKE UP!!!");

    }

}

所有代码都会编译,当我按下按钮时,第一个代码片段中的所有代码都会执行而不会崩溃 - 但一秒钟后,广播接收器代码不会执行。显然我误解了一些东西。

4

2 回答 2

2

我假设您缺少使用适当的操作字符串在清单文件中注册您的接收器。如下所示。

         <receiver android:name=".to_call_when_alarm_goes_off" > 
               <intent-filter>
                  <action android:name="com.android.whatever.WHAT_EVER_NAM_YOU_WANNA_GIVE" />
                </intent-filter>// can change name/action string as par ur requirement.
        </receiver>

intent.setAction("com.android.whatever.WHAT_EVER_NAM_YOU_WANNA_GIVE");你需要在你的意图中设置相同的动作字符串,记住动作字符串在 Manifest 和java中必须相同。那么只有它会触发接收器。

您的代码可以更改如下。

Intent intent = new Intent(getApplicationContext(), to_call_when_alarm_goes_off.class);
intent.setAction("com.android.whatever.WHAT_EVER_NAM_YOU_WANNA_GIVE");// added line

PendingIntent pIntent = PendingIntent.getBroadcast(getApplicationContext(),0, intent, 0);

AlarmManager alarms = (AlarmManager) getSystemService(Context.ALARM_SERVICE);

alarms.cancel(pIntent);


alarms.setRepeating(
        AlarmManager.RTC_WAKEUP,
        System.currentTimeMillis()+1000, 
        AlarmManager.INTERVAL_DAY, 
        pIntent);
于 2012-07-06T16:53:04.443 回答
0

您需要将to_call_when_alarm_goes_off类注册AndroidManifest.xml为接收者:

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

请参阅API 文档中的详细信息。

于 2012-07-06T16:51:24.883 回答