alarmmanager选择的时间和日期

时间:2012-12-23 15:22:42

标签: android

使用此代码,我尝试在25/12/2012 - 15.15将alarmmanager设置为明星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>

2 个答案:

答案 0 :(得分:1)

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

PendingIntent.getBroadcast

PendingIntent.getActivity

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

来自:

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

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

你还应该为这个活动提供一个android:name和android:标签。

如果您尝试使用getBroadcast,则需要更改此行,以便接收方获得广播,而不是使用待定意图启动活动。为此你可以使用

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

而不是

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

您还需要向intent3添加操作,例如:

intent3.setAction( “com.example.AlarmReceiver”);

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

答案 1 :(得分: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

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

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

如果你想在onReceive()中启动一个活动,写一下context.startActivity(...)。

编辑:也会改变您的意图:

Intent intent3 = new Intent("AlarmReceiver");