Ich suchte viel, aber ich kann nicht herausfinden, wie IntentService
auf Knopfdruck zu stoppen. Ich habe eine Taste, die IntentService
startet dann progressDialog
zeigt Via ResultReceiver
bekomme ich Daten zurück. Diese App sucht und zeigt Fotos vom Gerät an, also denke ich IntentService
ist der richtige Weg, es zu tun. Aber ich möchte es auf Abbrechen abbrechen. Gibt es dafür ein Beispiel oder eine gute Praxis?Wie Stop IntentService
MainAcitivity
:
@Override
public final void onReceiveResult(final int resultCode, final Bundle resultData) {
switch (resultCode) {
case ScanService.STATUS_RUNNING:
progressDialog = new ProgressDialog(MainActivity.this);
progressDialog.setMessage("Loading...");
progressDialog.setCancelable(false);
progressDialog.setButton(DialogInterface.BUTTON_NEGATIVE, "Cancel", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
dialog.dismiss();
//something to stop
}
});
progressDialog.show();
break;
case ScanService.STATUS_FINISHED:
progressDialog.dismiss();
listOfPictures = resultData.getParcelableArrayList(DATA_KEY);
break;
case ScanService.STATUS_ERROR:
final String error = resultData.getString(Intent.EXTRA_TEXT);
Toast.makeText(this, error, Toast.LENGTH_LONG).show();
break;
}
}
Scan-Service:
@Override
public int onStartCommand(final Intent intent, final int flags, final int startId) {
return super.onStartCommand(intent, flags, startId);
}
@Override
public void onDestroy() {
super.onDestroy();
}
@Override
protected void onHandleIntent(final Intent intent) {
final ResultReceiver scanResultReceiver = intent.getParcelableExtra(RECEIVER_KEY);
final Bundle bundle = new Bundle();
scanResultReceiver.send(STATUS_RUNNING, bundle);
// some work here
bundle.putParcelableArrayList(DATA_KEY, new ArrayList<>(listOfPictures));
scanResultReceiver.send(STATUS_FINISHED, bundle);
}
http://stackoverflow.com/questions/12112998/stoping-a-intentionservice-from-a-activity – Sangeeta