Java 在静态上下文(ARCore)中使用MediaPlayer时出现问题

Java 在静态上下文(ARCore)中使用MediaPlayer时出现问题,java,android,augmented-reality,arcore,Java,Android,Augmented Reality,Arcore,我正在使用谷歌的ARCore库创建一个应用程序来检测图像,播放特定图像的视频,然后在检测到新图像时停止该视频。图像检测的逻辑工作正常,我遇到的问题是android MediaPlayer类,当检测到新图像时停止视频 我为将被引用的MediaPlayer对象定义了一个单独的类(Singleton模式)。此类将用于启动和停止MediaPlayer public class AugmentedImageMediaPlayer { public static MediaPlayer mediaPlay

我正在使用谷歌的ARCore库创建一个应用程序来检测图像,播放特定图像的视频,然后在检测到新图像时停止该视频。图像检测的逻辑工作正常,我遇到的问题是android MediaPlayer类,当检测到新图像时停止视频

我为将被引用的MediaPlayer对象定义了一个单独的类(Singleton模式)。此类将用于启动和停止MediaPlayer

public class AugmentedImageMediaPlayer {

public static MediaPlayer mediaPlayerInstance = new MediaPlayer();

public static void startMediaPlayer(Context context, int augmentedImageIndex, Surface surface, boolean isLooping){
    mediaPlayerInstance = MediaPlayer.create(context, AugmentedImageFragment.videoList[augmentedImageIndex]);
    mediaPlayerInstance.setSurface(surface);
    mediaPlayerInstance.setLooping(isLooping);
}

public static void stopMediaPlayer(){
    if(mediaPlayerInstance.isPlaying()) {
        mediaPlayerInstance.stop();
    }
}
}

检测到新图像时,将创建一个节点,并从上面的类(AugmentedImageMediaPlayer)创建一个MediaPlayer对象。MediaPlayer在曲面上播放,并设置为节点上的可渲染对象

AugmentedImageMediaPlayer.startMediaPlayer(context, augmentedImageIndex, texture.getSurface(), false);

// Set the anchor based on the center of the image.
setAnchor(image.createAnchor(image.getCenterPose()));


//TODO: Video nodes here.
Node videoNode = new Node();
videoNode.setParent(this);


float videoWidth = AugmentedImageMediaPlayer.mediaPlayerInstance.getVideoWidth();
float videoHeight = AugmentedImageMediaPlayer.mediaPlayerInstance.getVideoHeight();
videoNode.setLocalScale(
        new Vector3(
                VIDEO_HEIGHT_METERS * (videoWidth / videoHeight), VIDEO_HEIGHT_METERS, 1.0f));

Quaternion q1 = videoNode.getLocalRotation();
Quaternion q2 = Quaternion.axisAngle(new Vector3(1.0f, 0f, 0f), 90f);
videoNode.setLocalRotation(Quaternion.multiply(q1, q2));

if (!AugmentedImageMediaPlayer.mediaPlayerInstance.isPlaying()) {
  AugmentedImageMediaPlayer.mediaPlayerInstance.start();

  // Wait to set the renderable until the first frame of the  video becomes available.
  // This prevents the renderable from briefly appearing as a black quad before the video
  // plays.
  texture
          .getSurfaceTexture()
          .setOnFrameAvailableListener(
                  (SurfaceTexture surfaceTexture) -> {
                    videoNode.setRenderable(videoPlacedRenderable);
                    texture.getSurfaceTexture().setOnFrameAvailableListener(null);
                  });

  // this stops the video from playingAugmentedImageMediaPlayer.mediaPlayerInstance.stop();
} else {
  videoNode.setRenderable(videoPlacedRenderable);
}
所有这些都正常工作,视频开始时也非常好。问题是,我无法在节点外部停止视频(可以在节点的类中停止视频),即使我定义了一个类来确保MediaPlayer可以被引用和更改

这就是我试图停止视频的地方:

node = new AugmentedImageNode(this);
        node.setImage(augmentedImage, this, this.augmentedImageIndex);
        augmentedImageMap.put(augmentedImage, node);
        arFragment.getArSceneView().getScene().addChild(node);
        AugmentedImageMediaPlayer.stopMediaPlayer();

任何关于我如何改变这一点的帮助,使其能够停止,或者如果我完全错过了一些明显的东西,那将是非常棒的。谢谢。

任何帮助都会很好。任何帮助都会很好。