新手,写的不对还望指正!
在安卓应用开发中经常会遇到需要打开系统文件管理器选择文件后返回路径的操作。例如点击一个导入的Button按钮,首先在根目录下寻找所需要的文件,若文件不存在就弹出对话框是否选择文件,选择文件后返回文件路径,给Button注册监听:
public void onClick(View arg0) {
if (mFilePath.equals("没有找到相关文件")) {
AlertDialog.Builder builder = new AlertDialog.Builder(FeildListActivity.this);
builder.setCancelable(false);
builder.setTitle("提示")
.setMessage("该目录下文件不存在是否从别的目录下寻找?")
.setPositiveButton("是",new DialogInterface.OnClickListener() {
@Override
public void onClick(
DialogInterface dialog,int which) {
// 打开系统文件浏览功能
Intent intent = new Intent();
intent.setAction(Intent.ACTION_GET_CONTENT);
intent.setType("*/*");
intent.addCategory(Intent.CATEGORY_OPENABLE);
startActivityForResult(intent,INFILE_CODE);
}
})
.setNegativeButton("否",null})
.show();
}
重写onActivityResult函数,在函数内部获得返回路径,代码如下:
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
if (resultCode != Activity.RESULT_OK) {
finish();
} else if (requestCode == INFILE_CODE) {
mFilePath = Uri.decode(data.getDataString());
//通过data.getDataString()得到的路径如果包含中文路径,则会出现乱码现象,经过Uri.decode()函数进行解码,得到正确的路径。但是此时路径为Uri路径,必须转换为String路径,网上有很多方法,本人通过对比发现,Uri路径里多了file://字符串,所以采用以下方法将前边带的字符串截取掉,获得String路径,可能通用性不够好,下一步会学习更好的方法。
mFilePath = mFilePath.substring(7, mFilePath.length());
}
}