一、资源管理器介绍
现在在一些移动终端上面都会有自带的资源管理器,其实其并非是Android系统自带,而是手机产商与app开发商的合作而导致融合,借助第三方的开发软件预装在出厂的手机,是新时代下的另一个霸王条款,还不能自行删除,十分麻烦。
背景铺垫完毕,由于十分讨厌这种不公平的手段,为此自行写一个实现文件资源管理器,功能基本上实现,实用不美观,不喜勿喷!
二、实现函数详解
1、显示文件列表
/**
* 扫描显示文件列表
* @param path
*/
private void showFileDir(String path) {
mFileName = new ArrayList<String>();
mFilePath = new ArrayList<String>();
File file = new File(path);
File[] files = file.listFiles();
//如果当前目录不是根目录
if (!ROOT_PATH.equals(path)) {
mFileName.add("@1");
mFilePath.add(ROOT_PATH);
mFileName.add("@2");
mFilePath.add(file.getParent());
}
//添加所有文件
for (File f : files) {
mFileName.add(f.getName());
mFilePath.add(f.getPath());
}
this.setListAdapter(new MyAdapter(this, mFileName, mFilePath));
}
2、Item点击事件
/**
* 点击事件
* @param l
* @param v
* @param position
* @param id
*/
@Override
protected void onListItemClick(ListView l, View v, int position, long id) {
String path = mFilePath.get(position);
File file = new File(path);
// 文件存在并可读
if (file.exists() && file.canRead()) {
if (file.isDirectory()) {
//显示子目录及文件
showFileDir(path);
} else {
//处理文件
fileHandle(file);
}
}
//没有权限
else {
Resources res = getResources();
new AlertDialog.Builder(this).setTitle("Message")
.setMessage(res.getString(R.string.no_permission))
.setPositiveButton("OK", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
Toast.makeText(getApplicationContext(), "没有权限删除不了..", Toast.LENGTH_SHORT).show();
}
}).show();
}
super.onListItemClick(l, v, position, id);
}
3、对文件进行重命名
public void onClick(DialogInterface dialog, int which) {
// 打开文件
if (which == 0) {
openFile(file);
}
//修改文件名
else if (which == 1) {
LayoutInflater factory = LayoutInflater.from(MainActivity.this);
view = factory.inflate(R.layout.rename_dialog, null);
editText = (EditText) view.findViewById(R.id.editText);
editText.setText(file.getName());
DialogInterface.OnClickListener listener2 = new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
// TODO Auto-generated method stub
String modifyName = editText.getText().toString();
final String fpath = file.getParentFile().getPath();
final File newFile = new File(fpath + "/" + modifyName);
if (newFile.exists()) {
//排除没有修改情况
if (!modifyName.equals(file.getName())) {
new AlertDialog.Builder(MainActivity.this)
.setTitle("注意!")
.setMessage("文件名已存在,是否覆盖?")
.setPositiveButton("确定", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
if (file.renameTo(newFile)) {
showFileDir(fpath);
displayToast("重命名成功!");
} else {
displayToast("重命名失败!");
}
}
})
.setNegativeButton("取消", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
}
})
.show();
}
} else {
if (file.renameTo(newFile)) {
showFileDir(fpath);
displayToast("重命名成功!");
} else {
displayToast("重命名失败!");
}
}
}
};
AlertDialog renameDialog = new AlertDialog.Builder(MainActivity.this).create();
renameDialog.setView(view);
renameDialog.setButton("确定", listener2);
renameDialog.setButton2("取消", new DialogInterface.OnClickListener() {
@Override
public void onClic