报警管理器不会触发

时间:2013-01-19 15:04:04

标签: java android

昨天我问了一个与此类似的问题但是我的代码已经改变了一些,现在有了不同的问题。

我有一个切换按钮,用于设置一个警告管理器,其具有应在5秒后触发的待定意图。我有一次性设置,所以我想让消息出现一次(后面我将为日期值实现这个)。

我对此代码没有错误,但我似乎无法触发我的意图,然后显示我的吐司信息。

以下是我在xml中定义'DateAlarm'类的活动的方法:

     <activity
        android:name=".DateAlarm"
        android:label="@string/app_name" >
        <intent-filter>
            <action android:name="com.example.flybase2.DateAlarm" />
            <category android:name="android.intent.category.DEFAULT" />
        </intent-filter>
    </activity>

继承我的切换按钮onClick方法,我的切换按钮与闹钟管理器:

case (R.id.toggleButton1):

    Integer dobMonth = setDate.getMonth();
    Integer dobYear = setDate.getYear();
    Integer dobDate = setDate.getDayOfMonth();

    Date set;
    set = new Date(dobYear - 1900, dobMonth, dobDate);


    AlarmManager am = (AlarmManager) getSystemService(Context.ALARM_SERVICE);
    Intent intent = new Intent(this, DateAlarm.class);
    PendingIntent pendingIntent = PendingIntent.getService(this, 0, intent, PendingIntent.FLAG_ONE_SHOT);
    am.set(AlarmManager.RTC_WAKEUP,System.currentTimeMillis() + (5 * 1000), pendingIntent); 


    break;

我最后的'DateAlarm'类包含意图的动作。

package com.example.flybase2;

import android.app.Activity;
import android.content.Context;
import android.os.Bundle;
import android.widget.Toast;

public class DateAlarm extends Activity {

Context context;
@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);

     Toast.makeText(context, "Appointment is today", Toast.LENGTH_LONG).show();
}

}

1 个答案:

答案 0 :(得分:0)

你有两个问题:

  1. 您使用的是PendingIntent.getService()而不是PendingIntent.getActivity(),因为DateAlarm延伸Activity,您需要PendingIntent.getActivity()

  2. DateAlarm中,您的上下文变量为null。在onCreate()中,您应该初始化它。另请注意,由于Activity扩展Context,因此不需要此变量。但是,如果您确实想要使用该变量,请执行以下操作:


  3. super.onCreate(savedInstanceState);
    context = this;
    

    Context context = this; //right from the global declaration