我试图运行它在后台运行,每20秒一个Android服务和用户的经纬度长数据发送到服务器进行查杀应用程序不重新启动跟踪。这是我第一次启动我的应用程序。现在,如果我点击主页按钮,它仍然在后台运行。但是,现在如果我使用主页按钮从应用程序列表中杀死我的应用程序。然后用启动器图标重新启动我的应用程序。现在服务不启动。我每20秒使用一次Alarm Manager来触发我的服务。但在重新启动时,我的闹钟已设置,但未在广播接收器上注册,因为未调用我的服务。 下面是我的代码: - MyFragment.java的onCreateView()我在哪里设置我的报警: -使用AlarmManager每20秒后,运行的是Android服务从应用列表
Intent alarm = new Intent(mContext, AlarmReceiver.class);
boolean alarmRunning = (PendingIntent.getBroadcast(mContext, 0, alarm, PendingIntent.FLAG_NO_CREATE) != null);
if (alarmRunning == false) {
Log.e("In OnCreateView DDFrag", "AlarmRunning == False");
PendingIntent pendingIntent = PendingIntent.getBroadcast(mContext, 0, alarm, 0);
AlarmManager alarmManager = (AlarmManager) mContext.getSystemService(Context.ALARM_SERVICE);
alarmManager.setRepeating(AlarmManager.ELAPSED_REALTIME_WAKEUP, SystemClock.elapsedRealtime(), 20000, pendingIntent);
} else{
Log.e("In OnCreateView DDFrag", "AlarmRunning == True");
}
AlarmReceiver.class: -
public class AlarmReceiver extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
Intent background = new Intent(context, MyService.class);
Log.e("AlarmReceiver", "Broadcasr Receiver started");
context.startService(background);
}
}
MyService.class : -
public class MyService extends Service {
public boolean isServiceRunning;
@Override
public IBinder onBind(Intent intent) {
return null;
}
@Override
public void onCreate() {
this.isServiceRunning = false;
}
@Override
public void onDestroy() {
this.isServiceRunning = false;
}
@Override
public int onStartCommand(Intent intent, int flags, int startId) {
if(!this.isServiceRunning) {
sendDataToServer();
this.isServiceRunning = true;
}
return START_STICKY;
}
private void sendDataToServer() {
// Performing my operation in this method..
// On Success of the method performed I am calling the below method and setting the below variables:
stopSelf();
this.isServiceRunning = false;
}
}
此外我定义我的服务和接收器在manifest.xml文件为: -
<service android:name="com.mypackagename.services.MyService" />
<receiver android:name="com.mypackagename.services.AlarmReceiver" />
请帮我解决问题,或点我我在做什么wroung。 至于第一次。因为我的闹钟管理器没有设置,它会设置并在20秒后调用服务appropiatley。但是,如果我杀了我的应用程序并重新启动它,那么我的闹钟已设置为不启动或重新设置。现在我的AlarmReceiver类永远不会收到Alarm BroadcastReceiver。
你测试什么设备? –
@DavidWasser我对联想A6010插槽 –
测试你有没有加入你的应用程序,以“保护应用”或应用程序列表中允许在后台运行的名单?在联想应该有像“设置 - >电源 - >后台应用程序管理”。请尝试找到它并将您的应用程序添加到列表中。让我知道你发现了什么。 –