我有一项服务,每15分钟检查一次Web API以获取一些信息,并且会发出通知。现在,当我单击按钮注销时,我正在执行stopService以停止正在运行的服务。我在我的设置上运行的应用程序上没有看到它,我相信它当前没有运行。但我仍然每隔15分钟收到通知。这是我的服务。
@Override
public void onCreate() {
// TODO Auto-generated method stub
super.onCreate();
intent = new Intent(BROADCAST_ACTION);
i1 = new Intent(this, BGService.class);
Notification note = new Notification( 0, null, System.currentTimeMillis() );
note.flags |= Notification.FLAG_NO_CLEAR;
startForeground(1337, note);
handler = new Handler();
preferences = getSharedPreferences(pref_data, Context.MODE_PRIVATE);
driverPassword = preferences.getString("driverPassword","");
carrierId = preferences.getString("carrierId","");
cctid = preferences.getString("CCTID","");
shipment = preferences.getString("shipment","");
try
{
JSONObject shipmentObject = new JSONObject(shipment);
shipmentID = shipmentObject.getString("ShipmentId");
}
catch(Exception e)
{
}
powerManager = (PowerManager) getSystemService(Context.POWER_SERVICE);
wakeLock = powerManager.newWakeLock(PowerManager.PARTIAL_WAKE_LOCK,
"MyWakeLock");
handler.removeCallbacks(sendWakeLock);
handler.postDelayed(sendWakeLock, 60000); // 1 second
}
@Override
public int onStartCommand(Intent intent, int flags, int startId) {
return Service.START_NOT_STICKY;
}
private Runnable sendWakeLock = new Runnable() {
public void run() {
wakeLock.acquire();
checkShipments();
handler.postDelayed(this, 900000);
}
};
private void checkShipments()
{
shipment = preferences.getString("shipment","");
StrictMode.ThreadPolicy policy = new StrictMode.ThreadPolicy.Builder().permitAll().build();
StrictMode.setThreadPolicy(policy);
String authData = "Basic " + Base64.encodeToString((cctid+ ":" + driverPassword).getBytes(), Base64.NO_WRAP);
String URL = "http://dev.landstarcapacityplus.com/MobileServices/api/Shipments?CCTID=" + cctid;
authData = "Basic " + Base64.encodeToString((cctid + ":" + driverPassword).getBytes(), Base64.NO_WRAP);
DefaultHttpClient httpclient = new DefaultHttpClient();
HttpGet httpget = new HttpGet(URL);
httpget.setHeader("Authorization", authData);
HttpResponse response = null;
try {
response = httpclient.execute(httpget);
StatusLine sl2 = response.getStatusLine();
int statCode2 = sl2.getStatusCode();
entityShipment = EntityUtils.toString(response.getEntity());
JSONObject shipments = new JSONObject(entityShipment);
Log.i("Tag", "Checked API for shipments");
Log.i("Status Code", String.valueOf(statCode2));
if (statCode2 == 200) {
try {
if(!entityShipment.equals(null) && !entityShipment.equals("") && !entityShipment.equals("[]") && !shipments.getString("ShipmentId").equals("0"))
{
if(shipment.equals(""))
{
Log.i("New Shipment", String.valueOf(statCode2));
if(preferences.getString("isBackground","").equals("True") && !preferences.getString("isAccepted","").equals("True"))
sendNotificationToDevice("You have a new shipment");
SharedPreferences.Editor editor = preferences.edit();
editor.putString("isDriverLogin", "True");
editor.putString("driverPassword", driverPassword);
editor.putString("carrierId", carrierId);
editor.putString("CCTID", cctid);
editor.putString("shipment", entityShipment);
editor.putString("isAccepted", "");
editor.putString("newshipment", "");
editor.putString("shipmentStatus", "");
editor.putString("lastGpsUpdate", "");
editor.commit();
sendBroadcast("new", entityShipment);
}
else
{
Log.i("Reassigned Shipment", String.valueOf(statCode2));
JSONObject storedShipment = new JSONObject(shipment);
if(!shipments.getString("ShipmentId").equals(storedShipment.getString("ShipmentId")))
{
if(preferences.getString("isBackground","").equals("True"))
{
if(preferences.getString("isAccepted","").equals("True"))
sendNotificationToDevice("GPS has been disabled. You have been assigned to a new shipment");
else
sendNotificationToDevice("You have been assigned to a new shipment");
}
SharedPreferences.Editor editor = preferences.edit();
editor.putString("isDriverLogin", "True");
editor.putString("driverPassword", driverPassword);
editor.putString("carrierId", carrierId);
editor.putString("CCTID", cctid);
editor.putString("shipment", shipment);
editor.putString("newshipment", entityShipment);
editor.putString("shipmentStatus", "");
editor.putString("lastGpsUpdate", "");
editor.commit();
stopService(i1);
sendBroadcast("new", entityShipment);
}
else
{
if(!preferences.getString("isAccepted","").equals("True"))
{
if(preferences.getString("isBackground","").equals("True"))
{
sendNotificationToDevice("You have a new shipment");
}
}
SharedPreferences.Editor editor = preferences.edit();
editor.putString("shipment", entityShipment);
editor.commit();
}
}
}
else
{
if(!shipment.equals(""))
{
Log.i("Removed shipment", String.valueOf(statCode2));
if(preferences.getString("isBackground","").equals("True"))
sendNotificationToDevice("Your shipment has been removed");
SharedPreferences.Editor editor = preferences.edit();
editor.putString("isDriverLogin", "True");
editor.putString("driverPassword", driverPassword);
editor.putString("carrierId", carrierId);
editor.putString("CCTID", cctid);
editor.putString("shipment", "");
editor.putString("isAccepted", "");
editor.putString("newshipment", "");
editor.putString("isRemoved", "True");
editor.putString("shipmentStatus", "");
editor.putString("lastGpsUpdate", "");
editor.commit();
stopService(i1);
sendBroadcast("removed", entityShipment);
}
}
}
catch (Exception e) {
}
}
else
{
}
}
catch (Exception e)
{
}
}
@SuppressWarnings("deprecation")
private void sendNotificationToDevice(String message)
{
NotificationManager mNotificationManager = (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE);
int icon = R.drawable.ic_launcher;
CharSequence tickerText = message;
long when = System.currentTimeMillis();
Notification notification = new Notification(icon, tickerText, when);
Context context = getApplicationContext();
CharSequence contentTitle = "Landstar";
CharSequence contentText = message;
Intent intent;
if(preferences.getString("isBackground","").equals("True"))
intent= new Intent(context, StartActivity.class);
else
intent= new Intent(context, LandstarPage.class);
intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_SINGLE_TOP);
PendingIntent contentIntent = PendingIntent.getActivity(this, 0, intent, PendingIntent.FLAG_UPDATE_CURRENT);
//PendingIntent contentIntent = PendingIntent.getActivity(this, 0, intent, PendingIntent.FLAG_UPDATE_CURRENT | Notification.FLAG_AUTO_CANCEL);
notification.defaults |= Notification.DEFAULT_SOUND;
notification.defaults |= Notification.DEFAULT_VIBRATE;
notification.setLatestEventInfo(context, contentTitle, contentText, contentIntent);
notification.flags |= Notification.FLAG_AUTO_CANCEL;
mNotificationManager.notify(1111, notification);
}
private void sendBroadcast(String status, String shipment)
{
intent.putExtra("status", status);
intent.putExtra("shipment", shipment);
sendBroadcast(intent);
}
@Override
public IBinder onBind(Intent arg0) {
// TODO Auto-generated method stub
return null;
}
以下是我如何阻止它。
stopService(i1);
这是意图。你可能会寻找它。
i1 = new Intent(this, BGService.class);
我已经包含了我所有的方法和所有重叠的方法供你们查看。你们对导致这种情况的原因有什么看法吗?谢谢!
答案 0 :(得分:1)
<强>问题:强>
I'm not seeing it on my running applications on my settings and I believe it is not currently running
<强>解决方案:强>
是的,您的Service
已停止,但Thread
仍在运行。
如下所述,只需覆盖onDestroy()
的{{1}}方法:
Service
我希望它会有所帮助!!