我正在尝试实现一个简单的服务,每小时将用户的当前位置发送到服务器。我的应用只需登录Activity
并设置活动,通常在后台工作。我使用AlarmManager
来实现我的目的并且效果很好但是当我被迫停止我的应用时,我的receiver
不起作用。这是我的代码。
MyApplication.java
@Override
public void onCreate() {
super.onCreate();
startService();
}
private void startService(){
Intent receiver = new Intent(this, LocationAlaramReceiver.class);
PendingIntent intent = PendingIntent.getBroadcast(this, 0, receiver, PendingIntent.FLAG_UPDATE_CURRENT);
AlarmManager mgr = (AlarmManager) getSystemService(Context.ALARM_SERVICE);
mgr.setRepeating(AlarmManager.RTC, System.currentTimeMillis(), AlarmManager.INTERVAL_HOUR, intent);
}
的AndroidManifest.xml
<receiver
android:name=".receiver.LocationAlarmReceiver">
</receiver>
LocationAlarmReceiver.java
public class LocationAlarmReceiver extends BroadcastReceiver
{
private final static String TAG = "LocationAlarmReceiver";
@Override
public void onReceive(Context context, Intent intent)
{
Log.d(TAG, "=========== onReceive ==============");
//Do something later
}
}
看到我的情况,它看起来并不保证AlarmManager
将始终被调用。我想让LocationAlramReceiver
每小时工作一次。我该如何解决我的问题?
答案 0 :(得分:0)
当用户强制停止您的应用程序时,Android(从3.1版开始)将其置于STOPPED STATE(此处更多http://commonsware.com/blog/2011/07/13/boot-completed-regression-confirmed.html)。您的应用程序在STOPPED状态下不会收到任何广播。为了摆脱这种状态,您的应用程序必须由用户或其他应用程序显式启动。