我看过几个指南,我基本上已经这样做了:
Main.java
public class Main extends Activity
{
PendingIntent pendingIntent;
@Override
public void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Calendar cal = Calendar.getInstance(TimeZone.getTimeZone("America/New_York"));
cal.set(Calendar.HOUR_OF_DAY, 22);
cal.set(Calendar.MINUTE, 0);
cal.set(Calendar.SECOND, 0);
Intent myIntent = new Intent(Main.this, Receiver.class);
pendingIntent = PendingIntent.getBroadcast(Main.this, 0, myIntent,0);
AlarmManager alarmManager = (AlarmManager)getSystemService(ALARM_SERVICE);
alarmManager.set(AlarmManager.RTC, cal.getTimeInMillis(), pendingIntent);
}
}
Receiver.java
public class Receiver extends BroadcastReceiver
{
@Override
public void onReceive(Context context, Intent intent)
{
Toast.makeText(context, "I'm running", Toast.LENGTH_SHORT).show();
}
}
AndroidManifest.xml
还包含<receiver android:name=".Receiver"/>
。
因此,根据我所读过的内容,无论应用程序是否实际运行,上述代码都应在纽约时间晚上10点显示toast
。目前,即使应用程序正在运行,它也不会执行任何操作。看起来Receiver
类甚至没有被调用。我错过了什么?
答案 0 :(得分:0)
你是否注册了Receiver with intent-filter? 如下所示
<intent-filter android:priority="2147483647" >
<action android:name="android.net.conn.CONNECTIVITY_CHANGE" />
</intent-filter>
答案 1 :(得分:0)
调整Calendar
对象的时间组件时,仅修改您专门设置的时间组件。如果您希望闹钟在晚上10点开始,您还需要设置Calendar.MINUTE
值。例如,如果您在下午6:47运行您的应用程序,那么您的警报就会被设置为晚上10:47。
答案 2 :(得分:0)
我发现了问题(正如我所暗示的那样here):我的Main.java
和Receiver.java
文件未放在同一个包中。我不明白这背后的逻辑。我喜欢将我的java
文件分成不同的软件包以用于组织目的,但显然Android并不喜欢这样。
如果有人可以告诉我如何使用java
下的2个不同包/文件夹中的src
文件执行上述操作,我会将其作为正确答案。