问题描述
我正在从我的内部存储中获取视频,我想重命名文件或删除文件就像我们在 MX 播放器、VLC 播放器中所做的一样,如果有人可以帮助我,请帮助我我尝试了很多次,但我不能如果您看到这个问题,请重命名或删除文件,请给我一些提示或一些示例,这对我或许多其他人非常有帮助 提前致谢:)
这是我的活动
AllVideoslistadapter allVideoslistadapter;
ArrayList<VideoFiles> videosList = new ArrayList<VideoFiles>();
ArrayList<VideoFiles> selection_ist = new ArrayList<VideoFiles>();
SwipeRefreshLayout allvideoListRefresh;
int counter = 0;
public boolean is_in_action_mode = false;
TextView counter_textView,dumytext;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setTitle(null);
setContentView(R.layout.activity_all_videos_list);
counter_textView = findViewById(R.id.counter_text);
dumytext = findViewById(R.id.all_videos_dumy_text);
counter_textView.setVisibility(View.GONE);
toolbar = findViewById(R.id.recently_toolbar);
setSupportActionBar(toolbar);
goBack = findViewById(R.id.recently_goback);
goBack.setonClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
onBackpressed();
}
});
allvideoListRefresh = findViewById(R.id.all_video_refresh);
allvideoListRefresh.setonRefreshListener(new SwipeRefreshLayout.OnRefreshListener() {
@Override
public void onRefresh() {
Toast.makeText(AllVideosList.this,"Refreshed",Toast.LENGTH_SHORT).show();
videosList.clear();
allVideoslistadapter.notifyDataSetChanged();
videoListshow();
clearactionMode();
allvideoListRefresh.setRefreshing(false);
}
});
videoListshow();
checkPermissions();
}
private void videoListshow() {
videosList = getAllVideos(this);
RecyclerView recyclerView = findViewById(R.id.filesRV);
recyclerView.setLayoutManager(new GridLayoutManager(this,1));
allVideoslistadapter = new AllVideoslistadapter(this,videosList,this);
recyclerView.setAdapter(allVideoslistadapter);
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
getMenuInflater().inflate(R.menu.searchview,menu);
MenuItem item = menu.findItem(R.id.search_view);
SearchView searchView = (SearchView)item.getActionView();
searchView.setQueryHint("enter video name");
searchView.setonQueryTextListener(new SearchView.OnQueryTextListener() {
@Override
public boolean onQueryTextSubmit(String query) {
allVideoslistadapter.getFilter().filter(query);
return false;
}
@Override
public boolean onQueryTextChange(String newText) {
allVideoslistadapter.getFilter().filter(newText);
return false;
}
});
return true;
}
private void checkPermissions() {
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
if (ContextCompat.checkSelfPermission(this,Manifest.permission.READ_EXTERNAL_STORAGE) != PackageManager.PERMISSION_GRANTED) {
requestPermissions(new String[]{Manifest.permission.READ_EXTERNAL_STORAGE},123);
} else {
videosList = getAllVideos(this);
}
}
}
@Override
public void onRequestPermissionsResult(int requestCode,@NonNull String[] permissions,@NonNull int[] grantResults) {
super.onRequestPermissionsResult(requestCode,permissions,grantResults);
if (requestCode == 123) {
if (grantResults.length > 0 && grantResults[0] == PackageManager.PERMISSION_GRANTED) {
videosList = getAllVideos(this);
} else {
Toast.makeText(this,"Permission Not Granted",Toast.LENGTH_SHORT).show();
}
}
}
public ArrayList<VideoFiles> getAllVideos(Context context) {
ArrayList<VideoFiles> tempVideoFiles = new ArrayList<>();
Uri uri = MediaStore.Video.Media.EXTERNAL_CONTENT_URI;
String sortOrder = MediaStore.Video.Media.DATE_ADDED + " DESC";
String[] projection = {
MediaStore.Video.Media.DATA,MediaStore.Video.Media._ID,MediaStore.Video.Media.TITLE,MediaStore.Video.Media.SIZE,MediaStore.Video.Media.DURATION,MediaStore.Video.Media.DATE_ADDED,MediaStore.Video.Media.disPLAY_NAME,MediaStore.Video.Media.RESOLUTION,};
Cursor cursor = context.getContentResolver().query(uri,projection,null,sortOrder);
if (cursor != null) {
int idColumn = cursor.getColumnIndexOrThrow(MediaStore.Video.Media._ID);
int dataColumn = cursor.getColumnIndexOrThrow(MediaStore.Video.Media.DATA);
int titleColumn = cursor.getColumnIndexOrThrow(MediaStore.Video.Media.TITLE);
int sizeColumn = cursor.getColumnIndexOrThrow(MediaStore.Video.Media.SIZE);
int durationnColumn = cursor.getColumnIndexOrThrow(MediaStore.Video.Media.DURATION);
int dateAddedColumn = cursor.getColumnIndexOrThrow(MediaStore.Video.Media.DATE_ADDED);
int displayColumn = cursor.getColumnIndexOrThrow(MediaStore.Video.Media.disPLAY_NAME);
int ressolutionColumn = cursor.getColumnIndexOrThrow(MediaStore.Video.Media.RESOLUTION);
while (cursor.movetoNext()) {
String path = cursor.getString(dataColumn);
String id = cursor.getString(idColumn);
String title = cursor.getString(titleColumn);
int size = cursor.getInt(sizeColumn);
String dataAdded = cursor.getString(dateAddedColumn);
String fileName = cursor.getString(displayColumn);
String resolution = cursor.getString(ressolutionColumn);
int duration = cursor.getInt(durationnColumn);
String duration_formatted;
int sec = (duration / 1000) % 60;
int min = (duration / (1000 * 60)) % 60;
int hrs = duration / (1000 * 60 * 60);
if (hrs == 0) {
duration_formatted = String.valueOf(min).concat(":".concat(String.format(Locale.UK,"%02d",sec)));
} else {
duration_formatted = String.valueOf(hrs).concat(":".concat(String.format(Locale.UK,min).concat(":".concat(String.format(Locale.UK,sec)))));
}
String humanReadableSize;
if (size < 1024) {
humanReadableSize = String.format(
context.getString(R.string.app_size_b),(double) size
);
} else if (size < Math.pow(1024,2)) {
humanReadableSize = String.format(
context.getString(R.string.app_size_kib),(double) (size / 1024)
);
} else if (size < Math.pow(1024,3)) {
humanReadableSize = String.format(
context.getString(R.string.app_size_mib),(double) (size / Math.pow(1024,2)));
} else {
humanReadableSize = String.format(
context.getString(R.string.app_size_gib),3))
);
}
VideoFiles videoFiles = new VideoFiles(id,path,title,fileName,humanReadableSize,dataAdded,resolution,duration_formatted);
tempVideoFiles.add(videoFiles);
}
cursor.close();
}
return tempVideoFiles;
}
@Override
public void onBackpressed() {
if (is_in_action_mode){
clearactionMode();
allVideoslistadapter.notifyDataSetChanged();
}
else {
super.onBackpressed();
}
}
@Override
public boolean onLongClick(View v) {
toolbar.getMenu().clear();
toolbar.inflateMenu(R.menu.contextual_menu);
counter_textView.setVisibility(View.VISIBLE);
goBack.setVisibility(View.GONE);
dumytext.setVisibility(View.GONE);
is_in_action_mode = true;
allVideoslistadapter.notifyDataSetChanged();
getSupportActionBar().setdisplayHomeAsUpEnabled(true);
return true;
}
public void prepareSelection (View view,int position){
if (((CheckBox)view).isChecked()){
selection_ist.add(videosList.get(position));
counter = counter+1;
updatecounter(counter);
}else {
selection_ist.remove(videosList.get(position));
counter = counter-1;
updatecounter(counter);
}
}
public void updatecounter(int counter){
if (counter == 0){
counter_textView.setText("0 item Selected");
}else {
counter_textView.setText(counter+" item Selected");
}
}
@Override
public boolean onoptionsItemSelected(@NonNull MenuItem item) {
if (item.getItemId()==R.id.delet_contex){
allVideoslistadapter.updateAdapter(selection_ist);
clearactionMode();
}
else if (item.getItemId()==android.R.id.home){
clearactionMode();
allVideoslistadapter.notifyDataSetChanged();
}
return true;
}
public void clearactionMode(){
is_in_action_mode = false;
toolbar.getMenu().clear();
toolbar.inflateMenu(R.menu.searchview);
getSupportActionBar().setdisplayHomeAsUpEnabled(false);
counter_textView.setVisibility(View.GONE);
goBack.setVisibility(View.VISIBLE);
dumytext.setVisibility(View.VISIBLE);
counter =0;
selection_ist.clear();
}
这是我的适配器
public class AllVideoslistadapter extends RecyclerView.Adapter<AllVideoslistadapter.MyViewHolder> implements Filterable {
private Context mContext;
ArrayList<VideoFiles> videoFiles;
ArrayList<VideoFiles> videoFilesFilter;
AllVideosList allVideosList;
View view;
Dialog dialog;
public AllVideoslistadapter(Context mContext,ArrayList<VideoFiles> videoFiles,AllVideosList allVideosList) {
this.mContext = mContext;
this.videoFiles = videoFiles;
this.videoFilesFilter = videoFiles;
this.allVideosList = allVideosList;
}
@NonNull
@Override
public MyViewHolder onCreateViewHolder(@NonNull ViewGroup parent,int viewType) {
view = LayoutInflater.from(mContext).inflate(R.layout.row_video,parent,false);
return new MyViewHolder(view,allVideosList);
}
@Override
public void onBindViewHolder(@NonNull MyViewHolder holder,int position) {
holder.fileName.setText(videoFilesFilter.get(position).getTitle());
holder.showQuality.setText(videoFilesFilter.get(position).getResolution());
holder.fileSize.setText(videoFilesFilter.get(position).getSize());
holder.tv_duration.setText(videoFilesFilter.get(position).getDuration());
Glide.with(mContext).load(new File(videoFilesFilter.get(position).getPath())).into(holder.imgView_thumbnail);
holder.itemView.setonClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Toast.makeText(mContext,"AllList",Toast.LENGTH_SHORT).show();
Intent intent = new Intent(mContext,PlayerActivity.class);
intent.putExtra("position",position);
intent.putExtra("sender","FilesIsSending");
intent.putExtra("title",videoFilesFilter.get(position).getTitle());
//Transition
Pair[] pairs = new Pair[1];
pairs[0] = new Pair<View,String>(holder.imgView_thumbnail,"logo_trans");
if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.LOLLIPOP) {
ActivityOptions options = ActivityOptions.makeSceneTransitionAnimation((Activity) mContext,pairs);
mContext.startActivity(intent,options.toBundle());
} else {
mContext.startActivity(intent);
}
}
});
if (!allVideosList.is_in_action_mode){
holder.checkBox.setVisibility(View.GONE);
}else {
holder.checkBox.setVisibility(View.VISIBLE);
holder.checkBox.setChecked(false);
}
holder.showMenu.setonClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
BottomSheetDialog bottomSheetDialog = new BottomSheetDialog(mContext,R.style.BottomShteetdialogTheme);
View bottomSheetView = LayoutInflater.from(mContext.getApplicationContext()).inflate(R.layout.more_options,(LinearLayout) view.findViewById(R.id.more_options_container));
bottomSheetView.findViewById(R.id.more_options_cancel).setonClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
bottomSheetDialog.dismiss();
}
});
bottomSheetView.findViewById(R.id.more_share).setonClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Toast.makeText(mContext,"Loading...",Toast.LENGTH_SHORT).show();
Intent intent = new Intent(Intent.ACTION_SEND);
intent.putExtra(Intent.EXTRA_TEXT,videoFilesFilter.get(position).getTitle());
intent.putExtra(Intent.EXTRA_STREAM,Uri.parse(videoFilesFilter.get(position).getPath()));
intent.setType("video/*");
mContext.startActivity(Intent.createChooser(intent,"Share this"));
}
});
bottomSheetView.findViewById(R.id.more_rename).setonClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
dialog = new Dialog(mContext);
dialog.setContentView(R.layout.player_more);
dialog.getwindow().setLayout(ViewGroup.LayoutParams.WRAP_CONTENT,ViewGroup.LayoutParams.WRAP_CONTENT);
dialog.getwindow().getAttributes().windowAnimations = R.style.DialogAnimation;
dialog.setCancelable(true);
dialog.show();
}
});
bottomSheetView.findViewById(R.id.more_delete).setonClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
AlertDialog.Builder alertDialogBuilder = new AlertDialog.Builder(mContext,AlertDialog.THEME_DEVICE_DEFAULT_DARK);
alertDialogBuilder.setTitle("Are you sure!").setCancelable(false)
.setPositiveButton("Ok",new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog,int which) {
videoFilesFilter.remove(position);
notifyDataSetChanged();
}
})
.setNegativeButton("Cancel",int which) {
dialog.cancel();
}
});
AlertDialog alertDialog = alertDialogBuilder.create();
alertDialog.show();
bottomSheetDialog.dismiss();
}
});
bottomSheetView.findViewById(R.id.more_properties).setonClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Intent properties = new Intent(mContext,PropertiesOfFile.class);
properties.putExtra("title",videoFilesFilter.get(position).getTitle());
properties.putExtra("res",videoFilesFilter.get(position).getResolution());
properties.putExtra("sizee",videoFilesFilter.get(position).getSize());
properties.putExtra("dur",videoFilesFilter.get(position).getDuration());
properties.putExtra("loc",videoFilesFilter.get(position).getPath());
properties.putExtra("date",videoFilesFilter.get(position).getDateAdded());
bottomSheetDialog.dismiss();
mContext.startActivity(properties);
}
});
bottomSheetDialog.setContentView(bottomSheetView);
bottomSheetDialog.show();
}
});
}
@Override
public int getItemCount() {
return videoFilesFilter.size();
}
@Override
public Filter getFilter() {
return new Filter() {
@Override
protected FilterResults performFiltering(CharSequence constraint) {
String character = constraint.toString();
if (character.isEmpty()) {
videoFilesFilter = videoFiles;
} else {
List<VideoFiles> filterList = new ArrayList<>();
for (VideoFiles modelVideo : videoFiles) {
if (modelVideo.getTitle().toLowerCase().contains(character.toLowerCase())) {
filterList.add(modelVideo);
}
}
videoFilesFilter = (ArrayList<VideoFiles>) filterList;
}
FilterResults filterResults = new FilterResults();
filterResults.values = videoFilesFilter;
return filterResults;
}
@Override
protected void publishResults(CharSequence constraint,FilterResults results) {
videoFilesFilter = (ArrayList<VideoFiles>) results.values;
notifyDataSetChanged();
}
};
}
static class MyViewHolder extends RecyclerView.ViewHolder implements View.OnClickListener {
ImageView imgView_thumbnail;
TextView fileName,tv_duration,showQuality,fileSize;
ImageButton showMenu;
CheckBox checkBox;
AllVideosList allVideosList;
RelativeLayout relativeLayout;
public MyViewHolder(@NonNull View itemView,AllVideosList allVideosList) {
super(itemView);
imgView_thumbnail = itemView.findViewById(R.id.imageView_thumbnail);
fileName = itemView.findViewById(R.id.tv_title);
tv_duration = itemView.findViewById(R.id.tv_duration);
showMenu = itemView.findViewById(R.id.more);
showQuality = itemView.findViewById(R.id.quality_showing);
fileSize = itemView.findViewById(R.id.show_MB);
this.allVideosList = allVideosList;
checkBox = itemView.findViewById(R.id.select_chechBox);
relativeLayout = itemView.findViewById(R.id.long_select_true);
relativeLayout.setonLongClickListener(allVideosList);
checkBox.setonClickListener(this);
}
@Override
public void onClick(View v) {
allVideosList.prepareSelection(v,getAdapterPosition());
}
}
public void updateAdapter(ArrayList<VideoFiles> list0){
for (VideoFiles allVideosRemove : list0)
{
videoFilesFilter.remove(allVideosRemove);
}
notifyDataSetChanged();
}
}
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)