我的应用程序这部分的目标是始终在后台运行重复警报,每 15 分钟从服务器端机器学习算法中获取一个新的预测,更新应用程序。
我目前已经实现了这种所需行为的框架,以确保我的方法正确。这个骨架应该每 10 秒触发一次祝酒,说明警报正在工作。但是,在我最初设置闹钟后,我再也没有看到其他消息。我还包括对控制台的写入,但这也从未出现过,这让我相信我并不完全了解警报接收器的工作原理。
这是我实例化警报和接收器的主要活动类:
public class MainActivity extends AppCompatActivity implements
TimePickerFragment.FragmentCallbacks {
private PendingIntent pendingIntent;
private AlarmManager manager;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
// Retrieve a PendingIntent that will perform a broadcast
Intent alarmIntent = new Intent(this, PredictionUpdateReceiver.class);
pendingIntent = PendingIntent.getBroadcast(this, 0, alarmIntent, 0);
startAlarm();
//...
}
//...
public void startAlarm() {
manager = (AlarmManager) getSystemService(Context.ALARM_SERVICE);
int interval = 10000;
manager.setRepeating(AlarmManager.RTC_WAKEUP,
System.currentTimeMillis(), interval, pendingIntent);
Toast.makeText(this, "Alarm Set", Toast.LENGTH_SHORT).show();
}
}
这是我的警报接收器类:
public class PredictionUpdateReceiver extends BroadcastReceiver {
@Override
public void onReceive(Context arg0, Intent arg1) {
// For our recurring task, we'll just display a message
Toast.makeText(arg0, "I'm running", Toast.LENGTH_SHORT).show();
System.out.print("Alarm activated");
}
}
我已经更新了我的清单:
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.example.habitabilitystudy"
android:versionCode="1"
android:versionName="1.0" >
<uses-sdk
android:minSdkVersion="11"
android:targetSdkVersion="22" />
<application
android:allowBackup="true"
android:icon="@drawable/ic_launcher"
android:label="@string/app_name"
android:theme="@style/AppTheme" >
<receiver android:name=".PredictionUpdateReceiver"></receiver>
<activity
android:name=".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>
</application>
</manifest>