gpt4 book ai didi

android - 警报管理器不工作

转载 作者:行者123 更新时间:2023-11-30 02:01:28 25 4
gpt4 key购买 nike

您好,我正在开发演示应用程序,我在其中使用 AlarmManager 安排每天 8:00 的服务。我正在使用 Calendar 将服务安排在 8:00 时钟,但此 AlarmManager 没有在安排的时间运行服务,甚至在 30 分钟后也是如此。

下面是我执行此操作的代码:-

public static void scheduleVerseNotificationService(Context mContext) {
AlarmManager alarmManager = (AlarmManager) mContext.getSystemService(Context.ALARM_SERVICE);
Intent intent = new Intent(mContext, DailyVerseNotificationService.class);
PendingIntent pendingIntent = PendingIntent.getBroadcast(mContext, 0, intent, 0);

// Set the alarm to start at approximately 08:00 morning.
Calendar calendar = Calendar.getInstance();
calendar.setTimeInMillis(System.currentTimeMillis());
calendar.set(Calendar.HOUR_OF_DAY, 8);

alarmManager.setInexactRepeating(AlarmManager.RTC_WAKEUP, calendar.getTimeInMillis(), AlarmManager.INTERVAL_DAY, pendingIntent);

}

测试服务.java

public class TestService extends Service {
public TestService() {
}

@Override
public IBinder onBind(Intent intent) {
return null;
}

@Override
public void onCreate() {
try {
// Code
} catch (Exception e) {
Logger.e(Constants.TAG, e.getMessage());
}
stopSelf();
}
}

AndroidManifest.xml

<service
android:name="com.service.TestService"
android:enabled="true"
android:exported="true" />

提前致谢。

最佳答案

两种解决方案:1) 而不是

    PendingIntent pendingIntent = PendingIntent.getBroadcast(mContext, 0, intent, 0);

使用

    PendingIntent pendingIntent = PendingIntent.getService(mContext, 0, intent, 0);

2) 如果这不起作用,那么您需要创建一个警报接收器

 public class AlarmReceiver extends WakefulBroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {

Log.i("AlarmReceiver", "onReceive");

ComponentName comp = new ComponentName(context.getPackageName(),
DailyVerseNotificationService.class.getName());
startWakefulService(context, (intent.setComponent(comp)));
setResultCode(Activity.RESULT_OK);
}

}

将您的未决意向更改为

     Intent intent = new Intent(mContext, AlarmReciever.class);
PendingIntent pendingIntent = PendingIntent.getBroadcast(mContext, 0, intent, 0);

在 list 中注册接收者

     <receiver android:name="com.example.myApp.AlarmReceiver" /> 

最后将权限放在 list 中

    <uses-permission android:name="android.permission.WAKE_LOCK" /> 

请同时引用: https://developer.android.com/training/scheduling/alarms.html

以上链接将指导您在“设备启动时启动警报”部分创建启动接收器。

还要确保设置:

    calendar.set(Calendar.MINUTE, 0); // for 0 minutes
calendar.set(Calendar.SECOND, 0); // for 0 seconds

关于android - 警报管理器不工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31389380/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com