调度程序与警报管理器...重新启动后无法工作
这是我的第一个问题。我正在制作一个Android应用程序,它会计算自动生成日期,以便通过生成日期来唤醒闹钟。每个预定日期我都有一个指挥官报警时间。调度程序与警报管理器...重新启动后无法工作
c8.add(Calendar.MONTH, 18);
sdf = new SimpleDateFormat("yyyy-dd-MM");
//String output = sdf.format(c.getTime());
Date eighteendtmonth= new Date(c8.getTimeInMillis());
dteighteenmonth = sdf.format(eighteendtmonth);
System.out.println("Eighteen Month date is--->"+dteighteenmonth);
c8.set(Calendar.HOUR_OF_DAY, bhour);
c8.set(Calendar.MINUTE, bminute);
try {
Date date1 = df.parse(dteighteenmonth); //birthdate
Date date2 = df.parse(currentdate); //
if(date1.equals(date2) || date1.after(date2))
{
setAlarm(c8, eighteenmonth, dteighteenmonth, alarmtime, name);
}
} catch (ParseException e) {
e.printStackTrace(); //To change body of catch statement use File | Settings | File Templates.
}
private void setAlarm(Calendar targetCal, String detail, String vdate, String vtime, String childname){
alarmid =(int) System.currentTimeMillis();
System.out.println("vdate is--->"+vdate);
System.out.println("alarm time is--->"+vtime);
System.out.println("Alarm is set----->");
Intent intent = new Intent(getApplicationContext(), AlarmReceiver.class);
intent.setAction("android.intent.action.MAIN");
intent.putExtra("detail", detail);
intent.putExtra("childname", name);
PendingIntent pendingIntent = PendingIntent.getBroadcast(getBaseContext(), alarmid, intent, PendingIntent.FLAG_ONE_SHOT);
AlarmManager alarmManager = (AlarmManager)getSystemService(Context.ALARM_SERVICE);
alarmManager.set(AlarmManager.RTC_WAKEUP, targetCal.getTimeInMillis(), pendingIntent);
}
的BroadcastReceiver ...
public void onReceive(Context context, Intent intent) {
Intent pushIntent = new Intent(context, Childlist.class);
pushIntent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
context.startService(pushIntent);
Toast.makeText(上下文中,详细地说,Toast.LENGTH_LONG).show();
AndroidManifest.xml中
<uses-permission android:name='android.permission.WAKE_LOCK'/>
<uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED"/>
<receiver
android:name=".AlarmReceiver"
android:enabled="true"
android:exported="true"
android:label="AlarmReceiver">
<intent-filter>
<action android:name="android.intent.action.MAIN"/>
<action android:name="android.intent.action.BOOT_COMPLETED" />
</intent-filter>
</receiver>
<receiver android:name=".AlarmReceiver" android:process=":remote" />
所以我的问题是,我的调度工作完美。但重启设备后没有一个警报工作。帮助meee :))
下面的内容已经从博客Android Boot Reciever
对于这种采取我们需要一个应该接受“BOOT_COMPLETED”广播的广播接收机。我们必须知道,当一个设备完成启动时,Android系统发送“BOOT_COMPLTED”广播。
在Android清单文件
<receiver android:name=".BootReceiver">
<intent-filter>
<action android:name="android.intent.action.BOOT_COMPLETED" />
<category android:name="android.intent.category.HOME" />
</intent-filter>
</receiver>
,不要忘记添加以下权限清单中注册的BootReciever。
<uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED"/>
此权限需要听/遐想BOOT_COMPLETED行动
BootReceiver.java
public class BootReceiver extends BroadcastReceiver
{
public void onReceive(Context context, Intent intent)
{
// Your code to execute when Boot Completd
**Schedule your Alarm Here**
Toast.makeText(context, "Booting Completed", Toast.LENGTH_LONG).show();
}
}
BootReceiver的onRecieve()方法启动完成时将执行,所以凌晨必要写onreceive()方法中的代码
[
重新启动时会清除警报。您可以在启动时将它们重新计划,方法是将它们存储在数据库中或以某种方式将它们序列化,然后使用带有<action android:name="android.intent.action.BOOT_COMPLETED" />
操作的BroadcastReceiver启动在启动完成时设置警报的服务。
我已经在BroadcastReceiver中放入了
@ user2226571:“如何从数据库启动警报......任何提示?” - 您的工作方式与您首先设置闹钟的方式相同。 – CommonsWare 2013-04-26 21:57:33
@CommonsWare是的,我知道我有这个项目的数据库类。但是如何在手机重启之后启动服务?我的代码工作正常,直到设备重新启动.... – 2013-04-27 03:29:13
请删除'android:process =:remote',因为它没有必要,并且浪费资源。 – CommonsWare 2013-04-26 21:57:55