sumanth g Ответов: 1

Мне нужно воспроизвести видео одно за другим, выбрав первое видео.


привет,
у меня был код со сканированием внешнего устройства и получением списка видео. нам нужно выбрать видео для воспроизведения.
мне нужно автоматизировать плеер, чтобы он мог воспроизводить все видео одно за другим.
как я могу это сделать?
 
package com.list.videolist;

import android.app.Activity;
import android.content.ContentResolver;
import android.content.Context;
import android.content.CursorLoader;
import android.content.Loader;
import android.content.Intent;
import android.database.Cursor;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.os.Bundle;
import android.provider.MediaStore;
import android.util.Log;
import android.view.View;
import android.view.ViewGroup;
import android.widget.AdapterView;
import android.widget.BaseAdapter;
import android.widget.ImageView;
import android.widget.ListView;
import android.widget.MediaController;
import android.widget.TextView;
import android.widget.AdapterView.OnItemClickListener;
import android.widget.VideoView;

public class VideoActivity extends Activity {
      private Cursor videocursor;
      private int video_column_index;
      ListView videolist;
      int count;
     //private  VideoView mVideoView;
     //private MediaController controller;

      /** Called when the activity is first created. */
      @Override
      public void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
          System.gc();
        //  mVideoView = (VideoView) findViewById(R.id.videoView);
         // mVideoView = new VideoView(getApplicationContext());
          //setContentView(mVideoView);

         //controller = new MediaController(this);
         // controller.setAnchorView(mVideoView);
         // controller.setMediaPlayer(mVideoView);
            setContentView(R.layout.main);
            init_phone_video_grid();
      }

      private void init_phone_video_grid() {
            System.gc();
            String[] proj = { MediaStore.Video.Media._ID,
                    MediaStore.Video.Media.DATA,
                    MediaStore.Video.Media.DISPLAY_NAME,
                    MediaStore.Video.Media.SIZE };
          //alternativie to managedQuery.
           videocursor = getContentResolver().query(MediaStore.Video.Media.EXTERNAL_CONTENT_URI,proj,null, null, null);

          //videocursor = managedQuery(MediaStore.Video.Media.EXTERNAL_CONTENT_URI, proj, null, null, null);
            count = videocursor.getCount();
            Log.d("count:", String.valueOf(count));
            videolist = (ListView) findViewById(R.id.VideoList);
            videolist.setAdapter(new VideoAdapter(getApplicationContext()));
            videolist.setOnItemClickListener(videogridlistener);
      }

      private OnItemClickListener videogridlistener = new OnItemClickListener() {
            public void onItemClick(AdapterView parent, View v, int position, long id) {
                  System.gc();

                  video_column_index = videocursor.getColumnIndexOrThrow(MediaStore.Video.Media.DATA);
                  videocursor.moveToPosition(position);
                  String filename = videocursor.getString(video_column_index);

                  Intent intent = new Intent(VideoActivity.this, ViewVideo.class);
                  intent.putExtra("videofilename", filename);


                  startActivity(intent);
                  Log.d("Video Path : ",filename);
              //  mVideoView.setVideoPath(filename);
              //  mVideoView.setMediaController(controller);
              //  mVideoView.requestFocus();

              //  mVideoView.start();
            }
      };

      public class VideoAdapter extends BaseAdapter {
            private Context vContext;

                  public VideoAdapter(Context c) {
                        vContext = c;
            }

            public int getCount() {
                  return count;
            }

            public Object getItem(int position) {
                  return position;
            }

            public long getItemId(int position) {
                  return position;
            }
@Override
            public View getView(int position, View convertView, ViewGroup parent) {
                  System.gc();

                  TextView tv = new TextView(vContext.getApplicationContext());

                  String id = null;
                  if (convertView == null) {
                        video_column_index = videocursor.getColumnIndexOrThrow(MediaStore.Video.Media.DISPLAY_NAME);
                        videocursor.moveToPosition(position);
                       id = videocursor.getString(video_column_index);
                       // video_column_index = videocursor.getColumnIndexOrThrow(MediaStore.Video.Media.SIZE);
                      //  videocursor.moveToPosition(position);
                      //  id += " Size(KB):" + videocursor.getString(video_column_index);

                      //ImageView iv = new ImageView(vContext);
                      //ContentResolver crThumb = getContentResolver();
                      //BitmapFactory.Options options=new BitmapFactory.Options();
                      //options.inSampleSize = 1;
                      //Bitmap curThumb = MediaStore.Video.Thumbnails.getThumbnail(crThumb, position, MediaStore.Video.Thumbnails.MICRO_KIND, options);
                      //iv.setImageBitmap(curThumb);

                       tv.setText(id);

                  } else
                        tv = (TextView) convertView;
                 return tv;
            }
      }

}


Эта основная активность называется видеоактивностью.



package com.list.videolist;

import android.app.Activity;
import android.content.Intent;
import android.database.Cursor;
import android.media.MediaPlayer;
import android.net.Uri;
import android.os.Bundle;
import android.os.Environment;
import android.provider.MediaStore;
import android.util.Log;
import android.widget.MediaController;
import android.widget.VideoView;

public class ViewVideo extends Activity {
    private String filename;
    //12/9/2016 -start
   // int count 0;
   // String _path;
    //12/9/2016 -end
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);

        // FrameLayout frame = new FrameLayout(this);
        System.gc();
        Intent i = getIntent();
        Bundle extras = i.getExtras();
        filename = extras.getString("videofilename");
        // VideoView vv = new VideoView(getApplicationContext());

        final VideoView vv = new VideoView(this);
        // final VideoView vv = (VideoView) findViewById(R.id.videoView);
        //12/9/2016-start
       // _path = "/mnt/media_rw/usbdisk/"+count+".*";
        //vv.setVideoPath(_path);
        //vv.start();
        //12/9/16-end

        setContentView(vv);
        //getWindow().setLayout(FrameLayout.LayoutParams.FILL_PARENT, FrameLayout.LayoutParams.FILL_PARENT);
        vv.setVideoPath(filename);
        vv.setMediaController(new MediaController(this));
        android.widget.FrameLayout.LayoutParams vvParams = (android.widget.FrameLayout.LayoutParams) vv.getLayoutParams();
        vvParams.gravity = 17; //gravity 17 = center horizontal & vertical
        vvParams.width = 5000;
        vv.setLayoutParams(vvParams);
        //setContentView(frame, new FrameLayout.LayoutParams(FrameLayout.LayoutParams.MATCH_PARENT, FrameLayout.LayoutParams.MATCH_PARENT));
        vv.requestFocus();
      //  Uri uri = Uri.parse(Environment.getExternalStorageDirectory().getAbsolutePath()+"/udisk/videos");
      //  vv.setVideoURI(uri);
        vv.start();


        // vv.setOnPreparedListener(new MediaPlayer.OnPreparedListener() {
        //    @Override
        //    public void onPrepared(MediaPlayer mediaPlayer) {
        //        mediaPlayer.setLooping(true);
        //     }
        //  });

      vv.setOnCompletionListener(new MediaPlayer.OnCompletionListener() {
            public void onCompletion(MediaPlayer player) {
                Log.i("VideoView", "onCompletion()");



               //for loogping vv.start();
                // finish() for closing.
                finish();
                vv.requestFocus();


            }

        });

    }
}


Что я уже пробовал:

Поиск способов автоматизации процесса

1 Ответов

Рейтинг:
1

Darren_vms

Не уверен, что ваш дизайн правильный, это выглядит так, как будто вы представляете пользователю список, который он нажимает, и вы играете. Однако вы передаете только одно имя файла видеоплееру. Если бы у вас был полный список, вы могли бы через завершение просто продолжать загружать следующий файл и воспроизводить его.

vv.setOnCompletionListener(new MediaPlayer.OnCompletionListener() {
        public void onCompletion(MediaPlayer player) {
            Log.i("VideoView", "onCompletion()");

            vv.setVideoPath(next_filename); // the next file in the list 

            vv.start();
            // finish() for closing.
            // finish();
            // vv.requestFocus();


        }

    });


Так что это логика, я бы перепроектировал метод выбора или удалил его.

/Даррен


sumanth g

Я не хочу жестко кодировать путь, давая setVideoPath();
то, что делает приведенный ниже код, - это " он будет отображать все видео из внешнего хранилища в listview и, нажав на список, видео будет воспроизводиться"
Из кода я могу отобразить список видео, и не знаю, как получить список и воспроизвести видео одно за другим? любая помощь

Darren_vms

Это не жесткое кодирование, у вас уже есть вызов vv. setvideopath () в коде, который вы предоставили, вы представляете listview, пользователь выбирает один из элементов. Затем вы загружаете лишние намерения и вызвать умысел на воспроизведение видео. Однако, передавая только имя файла выбранного элемента из списка, вы как бы стреляете себе в ногу за то, что больше не играете. Почему бы тебе не пройти мимо медиа-магазина ?

Ваш код очень похож на http://stackoverflow.com/questions/20007342/how-to-get-list-of-video-files-in-a-specific-folder-in-android вы работали над этим два года ?

/Даррен

Darren_vms

Итак, это код

http://www.androiddevelopersolutions.com/2013/12/android-play-video-from-sd-card.html



/Даррен

sumanth g

из этого кода мы можем воспроизвести видео, нажав на это видео, что я хочу сделать, это воспроизвести все видео по одному в текущем списке.

Darren_vms

продолжайте повторять одно и то же снова и снова, но это не приведет к тому, что это произойдет, возможно, вам следует прочитать о намерениях и переходах между ними.

sumanth g

Привет Игорь
я взял код из stackoverflow и работал над ним.

Darren_vms

Код из stackoverflow - это только одна часть, и в нем отсутствует процедура воспроизведения. Если вы смогли собрать это вместе сами, то вы можете решить эту проблему с помощью указателей, которые я дал

sumanth g

хорошо, я войду в намерения. если есть какие-то другие варианты. поместите комм-сеть

Darren_vms

Ну, это зависит от спецификаций, должен ли пользователь выбирать видео или они могут просто воспроизводить одно за другим ?

Вы хотите, чтобы приложение запомнило, какое видео было воспроизведено, и продолжало с последнего просмотренного ?

Я мог бы задать больше вопросов, и ответ может изменить то, что я рекомендую.

Это домашний проект или что-то коммерческое ?

/Даррен

sumanth g

Это просто домашний проект, не коммерческий.
Он должен отображать все видео
Он должен воспроизводить все видео одно за другим
Он должен запомнить, какое видео будет воспроизводиться, и перейти к следующему видео, после воспроизведения последнего видео он должен вернуться в предыдущее меню
/ Сумант

sumanth g

Привет Игорь,
можете ли вы помочь мне в этом приложении для android

Darren_vms

Именно это, как мне казалось, я и делал-помогал. Если вы хотите сказать, что я ничем не помог, то, полагаю, вы имеете право на свое мнение. Если вы просите меня написать код для вас, то мне придется отказаться. Если бы я написал код, я бы лишил вас возможности совершенствоваться и учиться.

Код, который вы нашли, поможет вам пройти 90% пути, да ладно, я знаю, что вы можете это сделать. Почитайте немного, попробуйте, посмотрите на код и поймите его.

Когда у вас есть любимый проект, и это лучшее время для обучения, вы хотите что-то, поэтому идите и получите это. Мы здесь для того, чтобы помощь общайтесь, а не пишите заявление за вас. Это было бы мошенничеством и лишило бы меня моей настоящей работы, которая оплачивает счета, чтобы я мог помощь поболтать с тобой можно здесь.

sumanth g

Спасибо, Даррен, за твой ответ.
Используя getcount (). я могу видеть, что нет доступных видео.Используя for loop, знайте,что я пытаюсь. Если это будет успех, я опубликую код. или я поставлю свои сомнения.

sumanth g

Привет Игорь,
я тестировал код с помощью цикла for. я поместил log. d для просмотра журнала.
я поместил Log. d("filepath", filepath);
который отображает путь к файлу точно так же, как и в пути?
но, дав имя пути к файлу непосредственно video_player_view. setVideoPath("путь к файлу"), он не смог воспроизвести видео. он подсказывает, что не может воспроизвести видео. Но мы я даю вот так
video_player_view.setVideoPath("/шоссе/sdcard/фильмы/видео/Азбука.В формате 3GP"); он способен воспроизводить видео.
как решить эту проблему?