Android Studio пустое VideoView не воспроизводит видео, записанное в эмуляторе - PullRequest
0 голосов
/ 11 марта 2019

Я пытаюсь записать видео с помощью камеры в эмуляторе.После записи я бы хотел, чтобы VideoView отображал изображение предварительного просмотра за 1 миллисекунду в клипе.Затем добавьте MediaController поверх VideoView.Пользователь должен нажать на кнопку, чтобы создать намерение активировать ACTION_VIDEO_CAPTURE.См. Макет пользовательского интерфейса здесь .

Я могу сделать запись в приложении камеры эмулятора, но проблема в том, что я не могу даже заставить его немедленно воспроизвести в VideoView.Как я могу достичь своей цели в первом абзаце?Я не получаю никаких сообщений об ошибках с устройства или в Logcat.После записи он просто возвращается к пустому видеопросмотру.Может ли это быть формат видео?

К вашему сведению, у меня есть ImageView на том же экране, который прекрасно работает.

onCreate метод

protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_create_new_card);

    toolbar = findViewById(R.id.toolbar);
    setSupportActionBar(toolbar);
    getSupportActionBar().setTitle("Create a new activity card");

    activity_title = findViewById(R.id.activity_title);
    imageView = findViewById(R.id.imageView);
    editText_hrs = findViewById(R.id.editText_hrs);
    editText_mins = findViewById(R.id.editText_mins);
    videoBtn = findViewById(R.id.uploadVideo);
    videoView = findViewById(R.id.videoView);
    checkbox = findViewById(R.id.check_useofitems);
    createcard_done = findViewById(R.id.createcard_done);

    drawer = findViewById(R.id.drawer_layout);
    ActionBarDrawerToggle toggle = new ActionBarDrawerToggle(
            this, drawer, toolbar, R.string.navigation_drawer_open, R.string.navigation_drawer_close);
    drawer.addDrawerListener(toggle);
    toggle.syncState();

    imageutils = new ImageUtils(this);
    imageView.setOnClickListener(new View.OnClickListener(){

        @Override
        public void onClick(View v) {
            imageutils.imagepicker(1);
        }
    });

    videoUtils = new VideoUtils(this);
    videoBtn.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            //videoUtils.videoPicker(1);
            //videoView.setVideoURI(videoUtils.getVideoUri());
            Intent videoIntent = new Intent(MediaStore.ACTION_VIDEO_CAPTURE);
            videoIntent.putExtra(MediaStore.EXTRA_OUTPUT, videoUri);
            if(videoIntent.resolveActivity(getPackageManager()) != null){
                startActivityForResult(videoIntent, VIDEO_REQUEST);
            }
        }
    });
    videoView.setVideoURI(videoUri);
    videoView.start();

метод onActivityResult

@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
    super.onActivityResult(requestCode, resultCode, data);

    switch(requestCode) {
        case 0:
            imageutils.onActivityResult(requestCode, resultCode, data);
            break;
        case 1:
            if (resultCode == RESULT_OK) {
                videoUri = data.getData();
            }
            break;
    }
}

1 Ответ

0 голосов
/ 12 марта 2019

Хорошо, мне удалось решить мою проблему, слава Богу.Проблема заключается в том, как я обрабатывал случаи requestCode в onActivityResult () .У меня есть ImageView и VideoView в той же деятельности.И мой ImageView, и VideoView позволяют пользователю загружать файлы с камеры или из галереи.

Это код для обработки ImageView и VideoView в методе onCreate () :

imageutils = new ImageUtils(this);
imageView.setOnClickListener(new View.OnClickListener(){
    @Override
    public void onClick(View v) {
        imageutils.imagepicker(1);
    }
});

videoUtils = new VideoUtils(this);
videoBtn.setOnClickListener(new View.OnClickListener() {
    @Override
    public void onClick(View v) {
        videoUtils.videoPicker(1);
    }
});

В моем классе ImageUtils у меня есть camera_call () и gallery_call () :

public void camera_call() {
    ContentValues values = new ContentValues();
    imageUri = current_activity.getContentResolver().insert(
            MediaStore.Images.Media.EXTERNAL_CONTENT_URI, values);
    Intent intent1 = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
    intent1.putExtra(MediaStore.EXTRA_OUTPUT, imageUri);
    current_activity.startActivityForResult(intent1, 0);
}

public void gallery_call() {
    Intent intent2 = new Intent(Intent.ACTION_PICK, MediaStore.Images.Media.EXTERNAL_CONTENT_URI);
    intent2.setType("image/*");
    current_activity.startActivityForResult(intent2, 1);
}

И в моем классе VideoUtils у меня также есть camera_call () и gallery_call () :

public void camera_call() {
    Intent videoIntent = new Intent(MediaStore.ACTION_VIDEO_CAPTURE);
    videoIntent.putExtra(MediaStore.EXTRA_OUTPUT, videoUri);
    current_activity.startActivityForResult(videoIntent, 2);
}

public void gallery_call() {
    Intent intent2 = new Intent(Intent.ACTION_PICK, MediaStore.Video.Media.EXTERNAL_CONTENT_URI);
    intent2.setType("video/*");
    current_activity.startActivityForResult(intent2, 3);
}

Как известно, параметры для startActivityForResult таковы: startActivityForResult (intent, requestCode).Вот так я обрабатываю разные requestCode для камеры и галереи в ImageView и VideoView в одном действии, используя onActivityResult () :

@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
    if(resultCode == RESULT_OK) {
        if(requestCode == 0 || requestCode == 1) {
            imageutils.onActivityResult(requestCode, resultCode, data);
        }
        if(requestCode == 2 || requestCode == 3) {
            videoView.setVisibility(View.VISIBLE);
            videoUri = data.getData();
            videoView.setVideoURI(videoUri);
            videoView.setFocusable(true);
            videoView.seekTo(1);
            MediaController mc = new MediaController(this);
            videoView.setMediaController(mc);
            Log.i("True", "Executed");
        }
    }
}

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

...