mic*_*lli 15 service android broadcastreceiver
在我的应用程序中,我有一个SQLite数据库,它有一个表,日期行以毫秒为单位.我希望每天都有通知,如果自我的数据库中存储的最后一个日期值起30天过去了.服务似乎是完成此检查的好方法.
我遇到了Commonsware,WakefulIntentService并认为这可能是答案,但我真的不知道应该如何实现它.在演示中,它在启动完成后5分钟后启动服务,这很好,但我需要添加什么才能让它在每个中午开始.(...但仅显示一个通知/天,而不是两个,从启动和定期每日检查)
我知道这可以使用AlarmManager解决,但实际上不知道如何.所以,我需要的帮助是给我一些样本/关键点,以便在每次启动和/或每天没有app运行时启动服务.
谢谢
War*_*zit 41
Android alarmmanager是你的答案.与广播接收器一起使用它也会重置电话唤醒时的警报.
现在使用代码示例:在方法内设置警报:
Intent intent = new Intent(context, AlarmReceiver.class);
intent.setAction("packagename.ACTION");
PendingIntent pendingIntent = PendingIntent.getBroadcast(context,
0, intent, PendingIntent.FLAG_CANCEL_CURRENT);
Calendar calendar = Calendar.getInstance();
calendar.setTimeInMillis(System.currentTimeMillis());
AlarmManager alarm = (AlarmManager) context.getSystemService(Context.ALARM_SERVICE);
alarm.cancel(pendingIntent);
alarm.setRepeating(AlarmManager.RTC_WAKEUP, calendar.getTimeInMillis(), AlarmManager.INTERVAL_DAY, pendingIntent);
Run Code Online (Sandbox Code Playgroud)
接收器为您的间隔:
public class AlarmReceiver extends BroadcastReceiver {
private final String SOMEACTION = "packagename.ACTION"; //packagename is com.whatever.www
@Override
public void onReceive(Context context, Intent intent) {
Time now = new Time();
now.setToNow();
String time = FileHandler.timeFormat(now);
String action = intent.getAction();
if(SOMEACTION.equals(action)) {
// here you call a service etc.
}
Run Code Online (Sandbox Code Playgroud)
接收器,用于在电话关闭时重置警报.
public class AlarmSetter extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
// get preferences
SharedPreferences preferences = context.getSharedPreferences("name_of_your_pref", 0);
Map<String, ?> scheduleData = preferences.getAll();
// set the schedule time
if(scheduleData.containsKey("fromHour") && scheduleData.containsKey("toHour")) {
int fromHour = (Integer) scheduleData.get("fromHour");
int fromMinute = (Integer) scheduleData.get("fromMinute");
int toHour = (Integer) scheduleData.get("toHour");
int toMinute = (Integer) scheduleData.get("toMinute");
//Do some action
}
}
}
Run Code Online (Sandbox Code Playgroud)
清单非常重要,这是在应用程序中添加的:
<receiver android:name="AlarmReceiver">
<intent-filter>
<action android:name="packagename.ACTION"/>
<action android:name="packagename.ACTION2"/>
</intent-filter>
</receiver>
<receiver android:name="AlarmSetter" >
<intent-filter>
<action
android:name="android.intent.action.BOOT_COMPLETED" />
</intent-filter>
</receiver>
Run Code Online (Sandbox Code Playgroud)
此外,为了使其正常工作,您需要添加权限以使用以下行接收清单中的引导广播:
<uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED" />
Run Code Online (Sandbox Code Playgroud)
如果有任何错误,请希望这可以解决问题.
编辑(添加闹钟示例):
public class AlarmSetter extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
// Do your stuff
}
}
Run Code Online (Sandbox Code Playgroud)
小智 5
这个答案看起来很古老.现在,我完全建议人们查看Google提供的SyncAdapter框架.它是为这些东西定制的.这是链接:https://developer.android.com/training/sync-adapters/index.html
| 归档时间: |
|
| 查看次数: |
21607 次 |
| 最近记录: |