0

我昨天问了一个与此类似的问题,但我对代码进行了一些更改,现在又遇到了不同的问题。

我有一个切换按钮,可以设置一个带有待处理意图的警报管理器,该意图应在 5 秒后触发。我将其设置为一次性设置,因此我希望消息出现一次(稍后我将针对日期值实施此操作)。

这段代码没有错误,但我似乎无法触发我的意图,然后显示我的 toast 消息。

以下是我在 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();
}

}

4

1 回答 1

0

你有两个问题:

  1. 你正在使用PendingIntent.getService()而不是PendingIntent.getActivity()因为DateAlarm扩展Activity,你想要PendingIntent.getActivity()

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


super.onCreate(savedInstanceState);
context = this;

或者

Context context = this; //right from the global declaration
于 2013-01-19T16:11:52.950 回答