Java Android AlarmManager每隔一天不工作

Java Android AlarmManager每隔一天不工作,java,android,alarmmanager,Java,Android,Alarmmanager,我正在为我的应用程序创建警报。闹钟应该在早上8点左右唤醒应用程序,并拨打服务器电话。当我将时间更改为一小时或更少时,它能够获取数据并发出通知。但是当我将日历延长到一天的间隔时,它就不起作用了。这是我的密码 设置报警: private void SetAlarm() { Calendar calendar = Calendar.getInstance(); calendar.setTimeInMillis(System.currentTimeMillis()); cale

我正在为我的应用程序创建警报。闹钟应该在早上8点左右唤醒应用程序,并拨打服务器电话。当我将时间更改为一小时或更少时,它能够获取数据并发出通知。但是当我将日历延长到一天的间隔时,它就不起作用了。这是我的密码

设置报警:

private void SetAlarm() {

    Calendar calendar = Calendar.getInstance();
    calendar.setTimeInMillis(System.currentTimeMillis());
    calendar.set(Calendar.HOUR_OF_DAY, 9);

    Intent intent = new Intent(this, TodayWordReceiver.class);
    boolean alarmUp = (PendingIntent.getBroadcast(getApplicationContext(),
            0, intent, PendingIntent.FLAG_NO_CREATE) != null);
    if (!alarmUp) {
        PendingIntent pendingIntent = PendingIntent.getBroadcast(this, 0, intent, PendingIntent.FLAG_UPDATE_CURRENT);
        AlarmManager alarmManager = (AlarmManager) getSystemService(Context.ALARM_SERVICE);
        alarmManager.setInexactRepeating(AlarmManager.RTC_WAKEUP, calendar.getTimeInMillis(),
                AlarmManager.INTERVAL_DAY, pendingIntent);

        Log.i("Alarm", "alarm set success");
    } else {
        Log.i("Alarm", "Already created");
    }
}
TodayWordReceiver:

public class TodayWordReceiver extends BroadcastReceiver {
public TodayWordReceiver() {}

@Override
public void onReceive (Context context, Intent intent) {
    WakeLocker.acquire(context);
    Log.i("Receiver", "Called here");
    Intent serIntent1 = new Intent(context, FetchTodayWordService.class);
    context.startService(serIntent1);

}
}

FetchTodayService:

public class FetchTodayWordService extends IntentService {

WordDay wordDay;
final String url =
        "http://api.wordnik.com:80/v4/words.json/wordOfTheDay?api_key=KEY";
public FetchTodayWordService () {
    super("FetchTodayWordService");
}

@Override
protected void onHandleIntent (Intent intent) {
    Log.i("OUTPUT", "Service called");
    MakeRequest();
}
public void MakeRequest()
{
    JsonObjectRequest jsonObjectRequest =
            new JsonObjectRequest
                    (Request.Method.GET, url, null, new Response.Listener<JSONObject>() {
                        @Override
                        public void onResponse (JSONObject response) {
                            wordDay = ParseWordDay.ParseJSON(response);
                            if(wordDay != null)
                            {
                                new StoreData().DoWork(getApplicationContext(), wordDay);
                            }

                        }
                    },
                            new Response.ErrorListener() {
                                @Override
                                public void onErrorResponse (VolleyError error) {
                                    Log.i("OUTPUT", String.valueOf(error));


                                }
                            });
    MySingleton.getInstance(getApplicationContext()).addToRequestQueue(jsonObjectRequest);
}
}

清单权限:

<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<uses-permission android:name="android.permission.VIBRATE" />
<uses-permission android:name="android.permission.WAKE_LOCK" />
<uses-permission android:name="com.android.alarm.permission.SET_ALARM"/>


谢谢迈克的回复。如果你检查一下BroadcatReceiver,我已经实现了一个自定义类,从中我获得了一个WakeLock。对不起。第一次就错过了。你确定它起作用了吗?你得到许可了吗?我想是的,迈克,我看到电话要开的时候就开了。您可以检查权限。我先编辑了postAt,我想这是因为我使用的是定制ROM,所以我从github下载了一个报警应用程序。成功了!。我的手机上还有其他闹钟,很好,一切看起来都很好,一目了然。我要提到的是,
setInexactRepeating()
显然是不精确的,如果间隔一天,它可能会关闭很多。您可以改用
setExact()
,至少在调试时是这样。
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<uses-permission android:name="android.permission.VIBRATE" />
<uses-permission android:name="android.permission.WAKE_LOCK" />
<uses-permission android:name="com.android.alarm.permission.SET_ALARM"/>