1

使用此代码,我尝试在 25/12/2012 - 15.15 将警报管理器设置为 Notify.class 星标,但是当我使用此代码时,Notify.class 不会启动。问题出在哪里?

Calendar cal = Calendar.getInstance(TimeZone.getDefault(), Locale.getDefault());

    cal.set(Calendar.DATE,25); 
    cal.set(Calendar.MONTH,Calendar.DECEMBER);
    cal.set(Calendar.YEAR,2012);
    cal.set(Calendar.HOUR_OF_DAY, 15);
    cal.set(Calendar.MINUTE, 15);     
    cal.set(Calendar.SECOND, 00);     

Intent intent3 = new Intent(context, Notify.class);
    PendingIntent pendingIntent = PendingIntent.getBroadcast(context, 0,intent3, 0);
alarmManager.set(AlarmManager.RTC_WAKEUP, cal.getTimeInMillis(), pendingIntent);

显现:

<activity android:name="Notify"></activity>
<receiver android:name="AlarmReceiver" >
            <intent-filter>
                <action android:name="com.example.AlarmReceiver" />
            </intent-filter>
4

2 回答 2

1

如果您只是尝试启动 Activity Notify.class,那么只需更改此行:

PendingIntent.getBroadcast

PendingIntent.getActivity

您还应该在清单中更改此行:

从:

<activity android:name="Notify"></activity>

<activity android:name=".Notify"></activity>

您还应该为此活动提供 android:name 和 android:label。

如果您尝试改用 getBroadcast,则需要更改此行,以便您的接收器获取广播,而不是启动具有未决意图的活动。为此,您将使用

Intent intent3 = new Intent(context, AlarmReceiver.class);

代替

Intent intent3 = new Intent(context, Notify.class);

您还想在您的意图3中添加一个操作,例如:

intent3.setAction("com.example.AlarmReceiver");

这样,在您的 AlarmReceiver 中,您可以过滤该意图并使用新意图执行操作,例如启动活动 Notify.class。

于 2012-12-23T16:22:47.987 回答
1

你应该写这个

<receiver android:name="com.example.AlarmReceiver" android:enabled="true">
        <intent-filter>
            <action android:name="AlarmReceiver"/>
        </intent-filter>
</receiver>

你已经切换了接收器的android:name和它的意图过滤器。您可以将com.example.AlarmReceiver替换为.AlarmReceiver

在清单中进行此更改后,您在广播接收器com.example.AlarmReceiver的 onReceive() 方法中编写的任何代码都将被执行。

您的代码将做的是为指定的日期时间设置警报管理器。那时它将触发一个动作名称为AlarmReceiver的意图。您的广播接收器在清单中,因此它将捕获广播并执行它的 onReceive() 方法。

如果您想启动一个活动,请在 onReceive() 中写入 context.startActivity(...)。

编辑:还将您的意图更改为:

Intent intent3 = new Intent("AlarmReceiver");
于 2012-12-23T16:28:47.210 回答