我正在尝试在启动时启动AlarmManager,它在设置的时间间隔内调用执行后台更新任务的服务(从我的服务器获取的数据)。我在stackoverflow上阅读和搜索,我仍然感到困惑,为什么它永远不会被调用。我甚至添加了
<action android:name="android.intent.action.QUICKBOOT_POWERON" />
因为我正在真正的HTC Android设备上测试我的应用程序。
这是我的BroadcastReceiver类
public class BootBroadcastReceiver extends BroadcastReceiver {
@Override
public void onReceive(Context pContext, Intent intent) {
startAlarmManager(pContext);
Log.d("Called", "yes");
}
void startAlarmManager(Context pContext) {
SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(pContext);
String a = readSettings(pContext);
Integer interval = Integer.parseInt(a);
Calendar cal = Calendar.getInstance();
cal.add(Calendar.MILLISECOND, interval);
Intent intent = new Intent(pContext, StudentServisUpdate.class);
PendingIntent pintent = PendingIntent.getService(pContext, 0, intent, 0);
AlarmManager alarm = (AlarmManager) pContext.getSystemService(Context.ALARM_SERVICE);
//for 30 mint 60*60*1000
alarm.setRepeating(AlarmManager.RTC_WAKEUP, cal.getTimeInMillis(), interval, pintent);
}
String readSettings(Context cx) {
try {
FileInputStream fis = cx.openFileInput("settings");
InputStreamReader isr = new InputStreamReader(fis);
BufferedReader bufferedReader = new BufferedReader(isr);
StringBuilder sb = new StringBuilder();
String line;
while ((line = bufferedReader.readLine()) != null) {
sb.append(line);
}
return sb.toString();
} catch (Exception e) {
e.printStackTrace();
}
return null;
}
}
这是我的AndroidManifest文件
<uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED" />
<application>
...
</application>
<!--<receiver android:process=":remote" android:name="AlarmReceiver"></receiver>-->
<receiver
android:name=".BootBroadcastReceiver" >
<intent-filter>
<action android:name="android.intent.action.BOOT_COMPLETED" />
<action android:name="android.intent.action.QUICKBOOT_POWERON" />
</intent-filter>
</receiver>
</manifest>
任何人都可以指出我正确的方向吗?我正在运行Android 4.4,我知道3.1后更改。
答案 0 :(得分:0)
事实证明我犯了一个愚蠢的错误。我在应用程序标签下添加了我的接收器,而不是在其中。此外,启动后服务tp启动需要更长的时间,具体取决于手机的性能。