I 360 Video Viewer in meinem Projekt zu implementieren, ich versuche aber ich erhalte eine Fehlermeldung für die Zeile:Methode loadVideoFromAsset muss vom UI-Thread aufgerufen werden
mVrVideoView.loadVideoFromAsset("sea.mp4", options);
Dies ist der Fehler
Method loadVideoFromAsset must be called from the UI thread, currently inferred
thread is worker
Folgendes ist mein Code:
package com.example.jal.jp;
import android.os.AsyncTask;
import android.os.Bundle;
import android.support.design.widget.FloatingActionButton;
import android.support.design.widget.Snackbar;
import android.support.v7.app.AppCompatActivity;
import android.support.v7.widget.Toolbar;
import android.view.View;
import android.widget.Button;
import android.widget.SeekBar;
import com.google.vr.sdk.widgets.video.VrVideoEventListener;
import com.google.vr.sdk.widgets.video.VrVideoView;
import java.io.IOException;
public abstract class VR_Video extends AppCompatActivity implements SeekBar.OnSeekBarChangeListener {
private VrVideoView mVrVideoView;
private SeekBar mSeekBar;
private Button mVolumeButton;
private boolean mIsPaused;
private boolean mIsMuted;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_vr__video);
initViews();
}
public void onPlayPausePressed() {
}
public void onVolumeToggleClicked() {
}
@Override
public void onProgressChanged(SeekBar seekBar, int i, boolean b) {
}
private void initViews() {
mVrVideoView = (VrVideoView) findViewById(R.id.video_view);
mSeekBar = (SeekBar) findViewById(R.id.seek_bar);
mVolumeButton = (Button) findViewById(R.id.btn_volume);
mVrVideoView.setEventListener(new ActivityEventListener());
mSeekBar.setOnSeekBarChangeListener(this);
mVolumeButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
onVolumeToggleClicked();
}
});
}
class VideoLoaderTask extends AsyncTask<Void, Void, Boolean> {
@Override
protected Boolean doInBackground(Void... voids) {
try {
VrVideoView.Options options = new VrVideoView.Options();
options.inputType = VrVideoView.Options.TYPE_MONO;
mVrVideoView.loadVideoFromAsset("sea.mp4", options);
} catch(IOException e) {
//Handle exception
}
return true;
}
}
public void playPause() {
}
@Override
protected void onPause() {
super.onPause();
mVrVideoView.pauseRendering();
mIsPaused = true;
}
@Override
protected void onResume() {
super.onResume();
mVrVideoView.resumeRendering();
mIsPaused = false;
}
@Override
protected void onDestroy() {
mVrVideoView.shutdown();
super.onDestroy();
}
private class ActivityEventListener extends VrVideoEventListener {
@Override
public void onLoadSuccess() {
super.onLoadSuccess();
}
@Override
public void onLoadError(String errorMessage) {
super.onLoadError(errorMessage);
}
@Override
public void onClick() {
super.onClick();
}
@Override
public void onNewFrame() {
super.onNewFrame();
}
@Override
public void onCompletion() {
super.onCompletion();
}
}
}
Bitte helfen. Ich habe mein Bestes versucht, konnte es aber nicht beheben.
Anruf dieser VrVideoView.Options Optionen = new VrVideoView .Optionen(); options.inputType = VrVideoView.Options.TYPE_MONO; mVrVideoView.loadVideoFromAsset ("sea.mp4", Optionen); außerhalb von AsyncTask. Ruf es nicht in doInBackground an. – Abhishek
Wo draußen zu schreiben? Ich versuchte es, aber ohne Erfolg. Ich bin Neuling für Android, versuche zu lernen. Wenn Sie es meinem Code hinzufügen und dann zeigen können, wäre das großartig. Danke vielmals. –
Wo rufen Sie VideoLoaderTask.execute() auf? Probieren Sie diese drei Zeilen Aufruf sofort nach "mVrVideoView.setEventListener (new ActivityEventListener());". Nicht im Hintergrund. – Abhishek