0
我必須在異步任務的本地文件夾中運行所有圖像和視頻視圖。我從文件夾中檢索了所有文件。基於文件類型i啓用ImageView
和VideoView
的可見性。如何在異步任務中運行圖像和視頻
我被困在這一點,我必須不斷循環這一點,並保持播放所有的圖像和視頻,直到應用程序關閉。一點指導都很有幫助。
我現有的代碼
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); '在uiThread上將會凍結這個應用程序,然後它會設置下一個圖像,但它仍然會凍結,在加載完最後一張圖片後,凍結將結束並且UI將被更新,因此您只會選擇最後一張圖像。 你必須用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