0

В моем приложении я начал загрузку сервиса, он отлично работает в фоновом режиме. Загружая мою группу тестирования, выполняющую принудительную остановку и очистку данных или Uninstall.But После удаления или очистки данных все еще моя служба загрузки работает в фоновом режиме. Во время загрузки i снова установили одно и то же приложение, но это неправдоподобно. Когда вы удаляете или очищаете данные или принудительно останавливаетесь, я должен отменить загрузку Как?Во время удаления приложения, как отменить загрузку?

public class FileDownloaderService extends IntentService { 


    private CarcarePreferences preferences; 

    public FileDownloaderService() { 
     super("FileDownloaderService"); 
    } 

    @Override 
    public void onCreate() { 
     super.onCreate(); 

     preferences = CarcarePreferences.getCarcarePreferencesObject(getApplicationContext()); 
     DBHelper.getInstance(getApplicationContext()).open(); 

     downloadManager = (DownloadManager) getSystemService(DOWNLOAD_SERVICE); 
    } 

    @Override 
    protected void onHandleIntent(Intent intent) { 
     Bundle extras = intent.getExtras(); 

     if (extras == null) { 
      return; 
     } 

     if (extras.containsKey("ResultReceiver")) { 
      resultReceiver = extras.getParcelable("ResultReceiver"); 
     } 

     if (extras.containsKey("ContentToDownload")) { 
      contentToDownload = extras.getInt("ContentToDownload"); 
     } else { 
      return; 
     } 

     if (contentToDownload != Carcare.ContentToDownload.IMAGES) { 
      isDefaultVehicle = extras.getBoolean("IsDefaultVehicle"); 
      fetchVehicle(); 
     } 

     switch (contentToDownload) { 
      case Carcare.ContentToDownload.HEADUNIT_IMAGES: 
       if (extras.containsKey("HeadUnits")) { 
        headUnits = (ArrayList<Unit>) extras.getSerializable("Units"); 
        downloadHeadUnits(); 
        resultReceiver.send(0, null); 
       } 
       break; 


     } 
    } 

    private void fetchVehicle() { 
     Object[] objects; 

     if (isDefaultVehicle) { 
      objects = DBAdapter.getAllVehicles(preferences.getDefaultModel(), 
        preferences.getDefaultYear(), isDefaultVehicle); 
     } else { 
      objects = DBAdapter.getAllVehicles(preferences.getCurrentModel(), 
        preferences.getCurrentYear(), isDefaultVehicle); 
     } 

     vehicle = (Vehicle) objects[0]; 
    } 

    private void downloadHeadUnits() { 
     mHeadUnitDir = SdUtils.getDir(this); 
     //clearHeadUnits(); 

     for (CUnit unit : Units) { 

      String fileName = mDir + "/" + unit.getGuid() + ".png"; 
      InputStream stream = null; 
      final HttpGet httpRequest = new HttpGet(unit.getHuImageUrl()); 
      httpRequest.setHeader(HTTP.CONN_DIRECTIVE, HTTP.CONN_KEEP_ALIVE); 
      try { 
       File file = new File(fileName); 
       if (!file.exists()) { 
        FileOutputStream out = new FileOutputStream(file); //openFileOutput(fileName); 
        stream = new DefaultHttpClient().execute(httpRequest).getEntity().getContent(); 
        Bitmap bitmap = BitmapFactory.decodeStream(stream); 
        bitmap.compress(Bitmap.CompressFormat.PNG, 100, out); 
       } 
      } catch (IOException ex) { 
       ex.printStackTrace(); 
      } catch (IllegalStateException ex) { 
       ex.printStackTrace(); 
      } catch (Exception e) { 
       e.printStackTrace(); 
      } 
     } 
    } 

    private void download() { 
     cancelDownload(Carcare.FileType.QRG, vehicle.getPath()); 
     deleteDoc(vehicle.getQRGPath()); 

     DownloadManager.Request request = new DownloadManager.Request(Uri.parse(vehicle.getUrl())); 
     request.setDestinationUri(Uri.parse(vehicle.getPath())); 
     request.setTitle("Unit"); 
     request.setDescription("Quick Reference Guide"); 

     preferences.setDownloadID(Carcare.FileType.QRG, downloadManager.enqueue(request)); 
    } 
} 
+0

** При удалении службы работает? **, это невозможно даже во сне. При удалении приложения все ресурсы, связанные с приложением, удаляются в одно мгновение. – nobalG

+0

@nobalG это происходит , используя только сервис-службу только я начал службу – Boopathi

+0

Можете ли вы придумать какой-то исходный код того, как вы начали загрузку. –

ответ

0

Посмотрите на метод DownloadManager remove().

Он говорит:

общественных ИНТО удаление (длинная ... ида) Добавлен в уровне API 9

Отменить загрузку и удалить их из менеджера загрузки. Каждая загрузка будет остановлена, если она будет запущена, и она больше не будет , доступной через менеджера загрузки. Если есть загруженный файл , его частичный или полный, он удаляется. Параметры идентификаторы идентификаторы скачивает удалить Возвраты

the number of downloads actually removed 

Редактировать

Для перехвата принять ваше приложение деинсталляция взглянуть на эту answer.

+0

@Boopathi Я отредактировал свой ответ, чтобы включить как перехватить приложение unistall, если это сработает для вас. –

0

Вы должны использовать Service.

В службе onDestroy(), вы можете написать код, чтобы закончить DownloadManager.

Service будет убит до того, как приложение собирается удалить. Таким образом, загрузка остановится.

+0

Как получить вызов метода ondestroy при удалении – Boopathi

Смежные вопросы