制作报警程序 - 不工作

时间:2012-07-06 16:42:58

标签: android

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

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!!!");

    }

}

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

2 个答案:

答案 0 :(得分:2)

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

         <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>

你需要在你的意图中设置相同的动作字符串,记住Action字符在Manifest中必须相同,而在java中也是intent.setAction("com.android.whatever.WHAT_EVER_NAM_YOU_WANNA_GIVE");。然后只会使接收器变干。

您的代码可以更改,如下所示。

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);

答案 1 :(得分:0)

您需要在to_call_when_alarm_goes_off中注册AndroidManifest.xml作为接收者:

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

请参阅API docs中的详细信息。