0

Мне нужно запустить все изображения и просмотр видео в локальной папке в async-задаче. Я получил все файлы из папки. На основе типа файла i включите видимость ImageView и VideoView.Как запустить изображение и видео в async-задаче

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

Мой существующий код

private void SetDirectory() 
{ 
    runOnUiThread(new Runnable() { 
     @Override 
     public void run() { 

      m_FolderPath = Environment.getExternalStorageDirectory().toString(); 

      File txtDirectory = new File(m_FolderPath + "/TestPlayer/"); 
      // Create a File object for the parent directory 
      boolean IsSuccess = false; 
      if(!txtDirectory.exists()) 
      { 
       IsSuccess = txtDirectory.mkdir(); 
      } 
      if(IsSuccess == true) 
      { 
       Log.d("Folder Created" , "Success"); 
      } 
      else 
      { 
       Log.d("Folder not Created" , "Not Created"); 
      } 

      List<File> files = loadImageFromStorage(txtDirectory.toString()); 

      if(files.size() > 0) 
      { 
       for(int nCount = 0; nCount < files.size() ; nCount ++) 
       { 
        String FileName = files.get(nCount).toString(); 
        m_CurrentMediaFilePath = FileName; 
        String FileExtension = FileName.substring(FileName.lastIndexOf(".")); 

        if(FileExtension.equalsIgnoreCase(".jpg") || FileExtension.equalsIgnoreCase(".png")) 
        { 
         m_VideoView.setVisibility(View.INVISIBLE); 
         m_ImageView.setVisibility(View.VISIBLE); 
         File imgFile = new File(FileName); 
         Bitmap myBitmap = BitmapFactory.decodeFile(imgFile.getAbsolutePath()); 
         m_ImageView.setImageBitmap(myBitmap); 
         m_ImageView.bringToFront(); 
         try 
         { 
          Thread.sleep(5000); 
         } 
         catch (Exception ex) 
         {} 
        } 
        else if(FileExtension.equalsIgnoreCase(".mp4")) 
        { 
         try 
         { 
          m_VideoView.setVisibility(View.VISIBLE); 
          m_VideoView.bringToFront(); 
          //m_ImageView.setVisibility(View.INVISIBLE); 
          m_VideoView.setVideoPath(FileName); 
          m_VideoView.start(); 
         } 
         catch (Exception ex) 
         { 
          Log.d("N", ex.toString()); 
         } 
        } 
       } 
      } 

     } 
    }); 
} 


public class MediaPlayer extends AsyncTask<String,Void, String> 
{ 
    @Override 
    protected void onProgressUpdate(Void... values) 
    { 
     super.onProgressUpdate(values); 
    } 

    @Override 
    protected String doInBackground(String... params) { 
     SetDirectory(); 
     return "Completed"; 
    } 

    @Override 
    protected void onPostExecute(String s) { 
     super.onPostExecute(s); 
    } 
} 
+0

'Thread.sleep (5000); 'on uiThread заставит это приложение зависнуть, после чего будет настроено следующее изображение, но все равно оно замерзает, после загрузки последнего изображения замораживание закончится, и пользовательский интерфейс будет обновлен, так что вы увидите только последнее изображение. Вы должны сделать это с помощью Handler (созданного на uithread) и postDelayed, в котором будут опубликованы Runnables, на которых будут отображаться следующие изображения, и публикация отложенных следующих Runnables для отображения следующих изображений до последнего изображения. – RadekJ

+0

Извините за задержку. Возможно ли, что я продолжу этот процесс по мере его завершения. Как только все файлы будут выполнены, я могу начать процесс снова и снова. Мне нравится C#, а в C# есть медиаплеер Windows. мы можем создать плейлист со всеми изображениями и видео. и играть снова и снова. Я не уверен, как это можно сделать в Android. Есть ли способ для этого .. ?? – user3501749

+0

Я бы начал с 'Timer', он позволяет запланировать какое-то действие, скажем каждые 5 секунд и отменить его, если необходимо. Затем в этом действии я напишу метод 'showCurrentMedia', который получит currentIndex и покажет среду, связанную с этим индексом, и увеличит этот currentIndex (конечно, если этот индекс равен размеру вашего списка, вам нужно сбросить его до нулевого значения до начало с начала) https://developer.android.com/reference/java/util/Timer.html – RadekJ

ответ

0

еще один способ сделать это что-то вроде этого:

void showFilesOnUiThread(final List<File> files) { 
     new Thread(new Runnable { 

      public void run() { 
       for(File file : files) { 
        runOnUiThread(new Runnable() { 
         public void run() { 
          showFile(file); 
         } 
        }); 
        Thread.sleep(5000); 
       } 
      } 
    }).start(); 
} 

конечно, реализующего showFile до вас

+0

Спасибо за помощь и извиниться за задержку. 1. Можете ли вы дать мне немного больше рекомендаций по коду. 2. Пожалуйста, обратитесь к комментарию по моему вопросу, чтобы получить большую ясность в вопросе, с которым я сталкиваюсь в Android. – user3501749

Смежные вопросы