昨天我问了一个与此类似的问题但是我的代码已经改变了一些,现在有了不同的问题。
我有一个切换按钮,用于设置一个警告管理器,其具有应在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();
}
}
答案 0 :(得分:0)
你有两个问题:
您使用的是PendingIntent.getService()
而不是PendingIntent.getActivity()
,因为DateAlarm
延伸Activity
,您需要PendingIntent.getActivity()
。
在DateAlarm
中,您的上下文变量为null。在onCreate()中,您应该初始化它。另请注意,由于Activity
扩展Context
,因此不需要此变量。但是,如果您确实想要使用该变量,请执行以下操作:
super.onCreate(savedInstanceState);
context = this;
或
Context context = this; //right from the global declaration