Мне нужно запустить все изображения и просмотр видео в локальной папке в 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);
}
}
'Thread.sleep (5000); 'on uiThread заставит это приложение зависнуть, после чего будет настроено следующее изображение, но все равно оно замерзает, после загрузки последнего изображения замораживание закончится, и пользовательский интерфейс будет обновлен, так что вы увидите только последнее изображение. Вы должны сделать это с помощью Handler (созданного на uithread) и postDelayed, в котором будут опубликованы Runnables, на которых будут отображаться следующие изображения, и публикация отложенных следующих Runnables для отображения следующих изображений до последнего изображения. – RadekJ
Извините за задержку. Возможно ли, что я продолжу этот процесс по мере его завершения. Как только все файлы будут выполнены, я могу начать процесс снова и снова. Мне нравится C#, а в C# есть медиаплеер Windows. мы можем создать плейлист со всеми изображениями и видео. и играть снова и снова. Я не уверен, как это можно сделать в Android. Есть ли способ для этого .. ?? – user3501749
Я бы начал с 'Timer', он позволяет запланировать какое-то действие, скажем каждые 5 секунд и отменить его, если необходимо. Затем в этом действии я напишу метод 'showCurrentMedia', который получит currentIndex и покажет среду, связанную с этим индексом, и увеличит этот currentIndex (конечно, если этот индекс равен размеру вашего списка, вам нужно сбросить его до нулевого значения до начало с начала) https://developer.android.com/reference/java/util/Timer.html – RadekJ