使用此代码,我尝试在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>
答案 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");