내 안드로이드 앱에서 3 분마다 작업을 실행하려고하는데, CPU가 잠든다면 깨워서 작업을 실행해야합니다. 내 작업은 CheckTask이고 Runnable입니다. 나는 AlarmManager가 내가 필요한 것을 알고 있고, 그것을 작동 시키려고 노력했지만 OnReceive() 메소드는 결코 실행되지 않는다. 아래 관련 코드는 무엇이 잘못되었는지 알려줌으로써 문제를 해결하고 작동 시키도록하십시오.알람이 작동하지 않는 이유는 무엇입니까?
의 AndroidManifest.xml
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.charles.sitechecker"
android:versionCode="1"
android:versionName="1.0" >
<uses-sdk
android:minSdkVersion="18"
android:targetSdkVersion="18"/>
<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.FLASHLIGHT"/>
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/>
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
<uses-permission android:name="com.android.alarm.permission.SET_ALARM"/>
<application
android:allowBackup="true"
android:icon="@drawable/ic_launcher"
android:label="@string/app_name"
android:theme="@style/AppTheme">
<activity
android:name="com.charles.sitechecker.MainActivity"
android:label="@string/app_name">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
<service
android:name=".LocalService"
android:enabled="true"
android:exported="false">
<intent-filter>
<action android:name="com.charles.sitechecker.LocalService" />
</intent-filter>
</service>
<receiver
android:name="com.charles.sitechecker.Alarm"
android:enabled="true"/>
</application>
Alarm.java
package com.charles.sitechecker;
import android.app.AlarmManager;
import android.app.PendingIntent;
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
public class Alarm extends BroadcastReceiver
{
private MainActivity mainActivity;
private AlarmManager aManager;
public Alarm()
{
}
Alarm(MainActivity mainActivity)
{
this.mainActivity = mainActivity;
aManager = (AlarmManager)mainActivity.getSystemService(Context.ALARM_SERVICE);
}
void scheduleAlarm()
{
Intent intent = new Intent(mainActivity, Alarm.class);
PendingIntent pIntent = PendingIntent.getBroadcast(mainActivity, 1, intent, PendingIntent.FLAG_UPDATE_CURRENT);
aManager.setRepeating(AlarmManager.ELAPSED_REALTIME_WAKEUP, System.currentTimeMillis(), 180000, pIntent);
}
public void onReceive(Context context, Intent intent)
{
Runnable task = new CheckTask(mainActivity);
task.run();
}
}
LocalService.java
package com.charles.sitechecker;
import android.app.Notification;
import android.app.Service;
import android.content.Intent;
import android.os.AsyncTask;
import android.os.IBinder;
public class LocalService extends Service
{
public void onCreate()
{
Notification n = MainActivity.checkTask.mainActivity.notifier.sendOngoingNotification("SiteChecker", "Sleeping", -1);
startForeground(-1, n);
Alarm alarm = new Alarm(MainActivity.checkTask.mainActivity);
alarm.scheduleAlarm();
}
public void onDestroy()
{
super.onDestroy();
}
public IBinder onBind(Intent intent)
{
return null;
}
public int onStartCommand(Intent intent, int flags, int startId)
{
return START_STICKY;
}
}