init
This commit is contained in:
@@ -0,0 +1,137 @@
|
||||
package com.uiui.videoplayer.activity;
|
||||
|
||||
import android.content.Intent;
|
||||
import android.os.Bundle;
|
||||
import android.view.MenuItem;
|
||||
import android.view.View;
|
||||
import android.view.ViewTreeObserver;
|
||||
import android.view.Window;
|
||||
import android.view.WindowManager;
|
||||
|
||||
import androidx.appcompat.app.AppCompatActivity;
|
||||
import androidx.recyclerview.widget.OrientationHelper;
|
||||
import androidx.recyclerview.widget.RecyclerView;
|
||||
|
||||
import com.uiui.videoplayer.CustomJzvd.JzvdStdAssert;
|
||||
import com.uiui.videoplayer.CustomJzvd.JzvdStdTikTok;
|
||||
import com.uiui.videoplayer.R;
|
||||
import com.uiui.videoplayer.adapter.TikTokRecyclerViewAdapter;
|
||||
import com.uiui.videoplayer.base.ViewPagerLayoutManager;
|
||||
import com.uiui.videoplayer.listener.OnViewPagerListener;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
|
||||
import cn.jzvd.Jzvd;
|
||||
|
||||
public class ActivityTikTok extends AppCompatActivity {
|
||||
|
||||
private RecyclerView rvTiktok;
|
||||
private TikTokRecyclerViewAdapter mAdapter;
|
||||
private ViewPagerLayoutManager mViewPagerLayoutManager;
|
||||
private int mCurrentPosition = -1;
|
||||
private int position = 0;
|
||||
private List<String> videoPath = new ArrayList<>();
|
||||
|
||||
@Override
|
||||
protected void onCreate(Bundle savedInstanceState) {
|
||||
super.onCreate(savedInstanceState);
|
||||
requestWindowFeature(Window.FEATURE_NO_TITLE);
|
||||
getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN,
|
||||
WindowManager.LayoutParams.FLAG_FULLSCREEN);
|
||||
|
||||
setContentView(R.layout.activity_tiktok);
|
||||
Intent intent = getIntent();
|
||||
if (null != intent) {
|
||||
position = intent.getIntExtra("position", 0);
|
||||
videoPath = intent.getStringArrayListExtra("list");
|
||||
}
|
||||
rvTiktok = findViewById(R.id.rv_tiktok);
|
||||
|
||||
mAdapter = new TikTokRecyclerViewAdapter(this,videoPath );
|
||||
mViewPagerLayoutManager = new ViewPagerLayoutManager(this, OrientationHelper.VERTICAL);
|
||||
rvTiktok.setLayoutManager(mViewPagerLayoutManager);
|
||||
rvTiktok.setAdapter(mAdapter);
|
||||
rvTiktok.getViewTreeObserver().addOnGlobalLayoutListener(new ViewTreeObserver.OnGlobalLayoutListener() {
|
||||
@Override
|
||||
public void onGlobalLayout() {
|
||||
|
||||
}
|
||||
});
|
||||
mViewPagerLayoutManager.setOnViewPagerListener(new OnViewPagerListener() {
|
||||
@Override
|
||||
public void onInitComplete() {
|
||||
//自动播放第一条
|
||||
autoPlayVideo(position);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onPageRelease(boolean isNext, int position) {
|
||||
if (mCurrentPosition == position) {
|
||||
Jzvd.releaseAllVideos();
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onPageSelected(int position, boolean isBottom) {
|
||||
if (mCurrentPosition == position) {
|
||||
return;
|
||||
}
|
||||
autoPlayVideo(position);
|
||||
mCurrentPosition = position;
|
||||
}
|
||||
});
|
||||
|
||||
rvTiktok.addOnChildAttachStateChangeListener(new RecyclerView.OnChildAttachStateChangeListener() {
|
||||
@Override
|
||||
public void onChildViewAttachedToWindow(View view) {
|
||||
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onChildViewDetachedFromWindow(View view) {
|
||||
Jzvd jzvd = view.findViewById(R.id.videoplayer);
|
||||
if (jzvd != null && Jzvd.CURRENT_JZVD != null && jzvd.jzDataSource != null &&
|
||||
jzvd.jzDataSource.containsTheUrl(Jzvd.CURRENT_JZVD.jzDataSource.getCurrentUrl())) {
|
||||
if (Jzvd.CURRENT_JZVD != null && Jzvd.CURRENT_JZVD.screen != Jzvd.SCREEN_FULLSCREEN) {
|
||||
Jzvd.releaseAllVideos();
|
||||
}
|
||||
}
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
private void autoPlayVideo(int postion) {
|
||||
if (rvTiktok == null || rvTiktok.getChildAt(0) == null) {
|
||||
return;
|
||||
}
|
||||
JzvdStdAssert player = rvTiktok.getChildAt(0).findViewById(R.id.videoplayer);
|
||||
if (player != null) {
|
||||
player.startVideoAfterPreloading();
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onBackPressed() {
|
||||
if (Jzvd.backPress()) {
|
||||
return;
|
||||
}
|
||||
super.onBackPressed();
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void onPause() {
|
||||
super.onPause();
|
||||
Jzvd.releaseAllVideos();
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean onOptionsItemSelected(MenuItem item) {
|
||||
switch (item.getItemId()) {
|
||||
case android.R.id.home:
|
||||
finish();
|
||||
break;
|
||||
}
|
||||
return super.onOptionsItemSelected(item);
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,195 @@
|
||||
package com.uiui.videoplayer.activity;
|
||||
|
||||
import androidx.annotation.NonNull;
|
||||
import androidx.appcompat.app.AppCompatActivity;
|
||||
import androidx.core.app.ActivityCompat;
|
||||
import androidx.core.content.ContextCompat;
|
||||
import androidx.recyclerview.widget.DefaultItemAnimator;
|
||||
import androidx.recyclerview.widget.RecyclerView;
|
||||
|
||||
import android.Manifest;
|
||||
import android.content.pm.PackageManager;
|
||||
import android.os.AsyncTask;
|
||||
import android.os.Build;
|
||||
import android.os.Bundle;
|
||||
import android.os.Environment;
|
||||
import android.util.Log;
|
||||
|
||||
import com.uiui.videoplayer.R;
|
||||
import com.uiui.videoplayer.base.RecycleGridLayoutManager;
|
||||
import com.uiui.videoplayer.base.SpacesItemDecoration;
|
||||
import com.uiui.videoplayer.adapter.VideoAdapter;
|
||||
|
||||
import java.io.File;
|
||||
import java.util.ArrayList;
|
||||
import java.util.LinkedList;
|
||||
import java.util.List;
|
||||
|
||||
public class MainActivity extends AppCompatActivity {
|
||||
private static final int REQUEST_PERMISSION_CODE = 200;
|
||||
String[] permissions = new String[]{Manifest.permission.READ_EXTERNAL_STORAGE,
|
||||
Manifest.permission.WRITE_EXTERNAL_STORAGE};
|
||||
private RecyclerView recyclerView;
|
||||
private VideoAdapter adapter;
|
||||
private RecycleGridLayoutManager mManager;
|
||||
|
||||
@Override
|
||||
protected void onCreate(Bundle savedInstanceState) {
|
||||
super.onCreate(savedInstanceState);
|
||||
setContentView(R.layout.activity_main);
|
||||
checkSelfPermission();
|
||||
initView();
|
||||
// String rootPath = Environment.getExternalStorageDirectory().getPath() + File.separator;
|
||||
// traverseFolder(rootPath);
|
||||
ScanTask scanTask = new ScanTask();
|
||||
scanTask.execute();
|
||||
}
|
||||
|
||||
private void initView() {
|
||||
recyclerView = findViewById(R.id.recyclerView);
|
||||
}
|
||||
|
||||
// private String[] getFolder(String folderPath) {
|
||||
//
|
||||
// }
|
||||
public void traverseFolder(String path) {
|
||||
int fileNum = 0, folderNum = 0;
|
||||
File file = new File(path);
|
||||
if (file.exists()) {
|
||||
LinkedList<File> list = new LinkedList<File>();
|
||||
File[] files = file.listFiles();
|
||||
for (File file2 : files) {
|
||||
if (file2.isDirectory()) {
|
||||
Log.e("traverseFolder1", "文件夹:" + file2.getAbsolutePath());
|
||||
list.add(file2);
|
||||
folderNum++;
|
||||
} else {
|
||||
Log.e("traverseFolder1", "文件:" + file2.getAbsolutePath());
|
||||
fileNum++;
|
||||
}
|
||||
}
|
||||
File temp_file;
|
||||
while (!list.isEmpty()) {
|
||||
temp_file = list.removeFirst();
|
||||
files = temp_file.listFiles();
|
||||
for (File file2 : files) {
|
||||
if (file2.isDirectory()) {
|
||||
Log.e("traverseFolder2", "文件夹:" + file2.getAbsolutePath());
|
||||
list.add(file2);
|
||||
folderNum++;
|
||||
} else {
|
||||
Log.e("traverseFolder2", "文件:" + file2.getAbsolutePath());
|
||||
fileNum++;
|
||||
}
|
||||
}
|
||||
}
|
||||
} else {
|
||||
Log.e("traverseFolder1", "文件不存在!");
|
||||
}
|
||||
Log.e("traverseFolder1", "文件夹共有:" + folderNum + ",文件共有:" + fileNum);
|
||||
}
|
||||
|
||||
private static final String[] extension = new String[]{
|
||||
".3gp", ".flv", ".mkv", ".mov", ".mp4", ".webm"
|
||||
};
|
||||
|
||||
private static boolean isVideoFormat(String filePath) {
|
||||
for (String s : extension) {
|
||||
if (filePath.endsWith(s)) {
|
||||
return true;
|
||||
}
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
public class ScanTask extends AsyncTask<Void, String, List<String>> {
|
||||
|
||||
@Override
|
||||
protected List<String> doInBackground(Void... voids) {
|
||||
List<String> fileList = new ArrayList<>();
|
||||
String rootPath = Environment.getExternalStorageDirectory().getPath() + File.separator;
|
||||
File file = new File(rootPath);
|
||||
if (file.exists()) {
|
||||
LinkedList<File> list = new LinkedList<File>();
|
||||
File[] files = file.listFiles();
|
||||
for (File file2 : files) {
|
||||
publishProgress(file2.getAbsolutePath());
|
||||
if (file2.isDirectory()) {
|
||||
list.add(file2);
|
||||
} else {
|
||||
if (isVideoFormat(file2.getAbsolutePath())) {
|
||||
fileList.add(file2.getAbsolutePath());
|
||||
}
|
||||
}
|
||||
}
|
||||
File temp_file;
|
||||
while (!list.isEmpty()) {
|
||||
temp_file = list.removeFirst();
|
||||
files = temp_file.listFiles();
|
||||
for (File file2 : files) {
|
||||
publishProgress(file2.getAbsolutePath());
|
||||
if (file2.isDirectory()) {
|
||||
list.add(file2);
|
||||
} else {
|
||||
if (isVideoFormat(file2.getAbsolutePath())) {
|
||||
fileList.add(file2.getAbsolutePath());
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
} else {
|
||||
Log.e("traverseFolder1", "文件不存在!");
|
||||
}
|
||||
return fileList;
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void onProgressUpdate(String... values) {
|
||||
super.onProgressUpdate(values);
|
||||
// Log.e("ScanTask", "onProgressUpdate: " + values[0]);
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void onPostExecute(List<String> strings) {
|
||||
super.onPostExecute(strings);
|
||||
Log.e("ScanTask", "onPostExecute: " + strings);
|
||||
adapter = new VideoAdapter(MainActivity.this, strings);
|
||||
mManager = new RecycleGridLayoutManager(MainActivity.this, 2);
|
||||
recyclerView.setLayoutManager(mManager);
|
||||
recyclerView.setNestedScrollingEnabled(false);
|
||||
recyclerView.addItemDecoration(new SpacesItemDecoration(getResources().getDimensionPixelSize(R.dimen.PX1x), getResources().getDimensionPixelSize(R.dimen.PX1x),
|
||||
getResources().getDimensionPixelSize(R.dimen.PX1x), getResources().getDimensionPixelSize(R.dimen.PX1x)));
|
||||
((DefaultItemAnimator) recyclerView.getItemAnimator()).setSupportsChangeAnimations(false);
|
||||
// recyclerView.setLayoutManager(new LinearLayoutManager(MainActivity.this));
|
||||
recyclerView.setAdapter(adapter);
|
||||
}
|
||||
}
|
||||
|
||||
private void checkSelfPermission() {
|
||||
List<String> mPermissionList = new ArrayList<>();
|
||||
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
|
||||
for (String s : permissions) {
|
||||
if (ContextCompat.checkSelfPermission(this, Manifest.permission.READ_EXTERNAL_STORAGE) == PackageManager.PERMISSION_DENIED) {
|
||||
mPermissionList.add(s);
|
||||
}
|
||||
}
|
||||
if (mPermissionList.size() > 0) {//有权限没有通过,需要申请
|
||||
ActivityCompat.requestPermissions(this, permissions, REQUEST_PERMISSION_CODE);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {
|
||||
super.onRequestPermissionsResult(requestCode, permissions, grantResults);
|
||||
if (requestCode == REQUEST_PERMISSION_CODE) {
|
||||
//当然权限多了,建议使用Switch,不必纠结于此
|
||||
if (grantResults[0] == PackageManager.PERMISSION_GRANTED) {
|
||||
|
||||
} else if (grantResults[0] == PackageManager.PERMISSION_DENIED) {
|
||||
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
@@ -0,0 +1,16 @@
|
||||
package com.uiui.videoplayer.activity;
|
||||
|
||||
import androidx.appcompat.app.AppCompatActivity;
|
||||
|
||||
import android.os.Bundle;
|
||||
|
||||
import com.uiui.videoplayer.R;
|
||||
|
||||
public class PlayActivity extends AppCompatActivity {
|
||||
|
||||
@Override
|
||||
protected void onCreate(Bundle savedInstanceState) {
|
||||
super.onCreate(savedInstanceState);
|
||||
setContentView(R.layout.activity_play);
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user