2017-04-22 5 views
0

Ich lade Video von Async-Aufgabe. Wenn das Laden des Videos zu lange dauerte, drücken Sie erneut, um abzubrechen.Android Abbrechen Async-Aufgabe, wenn zurück gedrückt

Mein Code hier

public class LiveStreaming extends AppCompatActivity { 

VideoView videoView; 
private myAsync sync; 
ProgressDialog progressDialog; 

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 

    getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN, 
      WindowManager.LayoutParams.FLAG_FULLSCREEN); 
    setContentView(R.layout.activity_live_streaming); 


    String videourl = getIntent().getStringExtra("Link"); 
    videoView = (VideoView) findViewById(R.id.videoStreaming); 
    progressDialog = ProgressDialog.show(this, "", 
      "Loading TV...", true); 
    progressDialog.setCancelable(false); 
    // progressDialog.dismiss(); 
    MediaController mediaController = new MediaController(this); 
    mediaController.setAnchorView(videoView); 

    Uri video = Uri.parse(videourl);// insert video url 
    videoView.setMediaController(mediaController); 
    videoView.setVideoURI(video); 
    videoView.requestFocus(); 

    sync = new myAsync(); 
    sync.execute(); 
    // PlayVideo(); 
} 


private class myAsync extends AsyncTask<Void, Integer, Void> { 

    int duration = 0; 
    int current = 0; 
    private volatile boolean running = true; 

    @Override 
    protected void onCancelled() { 
     running = true; 
    } 

    @Override 
    protected void onPreExecute() { 

    } 

    @Override 
    protected Void doInBackground(Void... params) { 

     videoView.setOnPreparedListener(new MediaPlayer.OnPreparedListener() { 

      public void onPrepared(MediaPlayer mp) { 
       progressDialog.dismiss(); 

    videoView.start(); 
       duration = videoView.getDuration(); 
      } 
     }); 

     do { 

      current = videoView.getCurrentPosition(); 
      System.out.println("duration - " + duration + " current- " 
        + current); 

      if (sync.isCancelled()) 
       break; 

     } 

     while (current != duration || current == 0); 

     return null; 
    } 

} 

@Override 
public void onBackPressed() { 
    super.onBackPressed(); 
    if (sync!=null){ 
     this.finish(); 
    } 
} 

}

ich meine App korrigiert.

Wenn zurück gedrückt wurde, wurde die Methode nicht aufgerufen. Ich weiß nicht, was das Problem ist

Danke

+0

Verwendung sync.cancel stoppen wollen verwenden möchten Methode, asynchtask zu stoppen –

+0

@ Divyesh Patel Ich habe es bereits verwendet. Mein Problem ist, wenn die Zurück-Taste gedrückt wurde. Die Methode onBackPressed wurde nicht –

+0

genannt, siehe Antwort unten. Upvote, wenn es Ihnen geholfen hat. Danke –

Antwort

1

entfernen super.onBackPressed(); für onBackPressed() zu work.and die async abbrechen Sie sync.cancel()

+0

Was ist das Problem, wenn Zurück-Taste gedrückt. Die Methode wurde nicht aufgerufen? –

+0

hat es funktioniert? . Sie rufen die Standardfunktionalität von onBackpressed auf, indem Sie super.onBackpressed() aufrufen. die normalerweise die aktuelle Aktivität beenden und zurückgeben, ohne die nächsten Schritte in onBackpressed override method auszuführen. –

+0

Keine onBackPressed-Methode wurde überhaupt nicht aufgerufen. –

1

Erklären Sie Ihre Asynchron-Aufgabe in Ihrer Aktivität aufrufen können.

private YourAsyncTask mTask; 

Instantiate Ihre async Aufgabe, wo Sie

mTask = new YourAsyncTask().execute(); 

Und dann widerrufen, wenn Sie die Aufgabe

mTask.cancel(true); 

hoffe, das hilft

+0

Was ist das Problem, wenn die Zurück-Taste gedrückt wird. Die Methode wurde nicht aufgerufen? –

+0

this.finish(); beendet die Aktivität, Sie müssen die Aufgabe stoppen. –

+0

anstelle von this.finish(); Verwenden Sie sync.cancel (true); –

Verwandte Themen