现在界面上通过点击一个按钮事件来选择文件(如在发邮件时用来选择附件并获得附件的文件目录地址)
这里有可行的一段代码:
// 添加附件
w_addAttach.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
// 把附件的路径和大小显示在下面的控件上
WriteMessageActivity.this.onSelectFromFileExplorer();
attachView = (View) LayoutInflater.from(
WriteMessageActivity.this).inflate(
R.layout.message_compose_attachment, null);
attachLayout.addView(attachView);
}
});
private void onSelectFromFileExplorer() {
//让用户选择数据,并返回所选的数据
Intent intent = new Intent("android.intent.action.GET_CONTENT");
//只需获得URI的值
intent.addCategory("android.intent.category.OPENABLE");
intent.setType("*
@Override
public void onActivityResult(int requestCode, int resultCode, Intent data) {
if (resultCode != RESULT_OK) {
Log.e("THG", "ActivityResult resultCode error");
return;
}
System.out.println("URI=" + data.getData());
// 通过ContentReslover查找对应的uri的信息
ContentResolver cr = this.getContentResolver();
Cursor cursor = cr.query(data.getData(), null, null, null, null);
cursor.moveToFirst();
for (int i = 0; i < cursor.getColumnCount(); i++) {
System.out.println(i + "-----------------" + cursor.getString(i));
}
// cursor中的第一列就是绝对地址
System.out.println(cursor.getString(1));
// pic_file=new File(cursor.getString(1));
super.onActivityResult(requestCode, resultCode, data);
}
访问系统文件必然向获得文件的目录地址,先来解释一下URI
什么是URI?
详细ContentResolver说明:http://blog.csdn.net/bigapple88/article/details/6251386
在学习如何获取ContentResolver前,有个名词是必须了解的:URI。URI是网络资源的定义,在Android中赋予其更广阔的含义,先看个例子,如下:
将其分为A,B,C,D 4个部分:
A:标准前缀,用来说明一个Content Provider控制这些数据,无法改变的;
B:URI的标识,它定义了是哪个Content Provider提供这些数据。对于第三方应用程序,为了保证URI标识的唯一性,它必须是一个完整的、小写的类名。这个标识在<provider> 元素的 authorities属性中说明:
<provider name=”.TransportationProvider” authorities=”com.example.transportationprovider” . . . >
C:路径,Content Provider使用这些路径来确定当前需要生什么类型的数据,URI中可能不包括路径,也可能包括多个;
D:如果URI中包含,表示需要获取的记录的ID;如果没有ID,就表示返回全部;
由于URI通常比较长,而且有时候容易出错,切难以理解。所以,在Android当中定义了一些辅助类,并且定义了一些常量来代替这些长字符串,例如:People.CONTENT_URI
//获得文件的输入流
//InputStream is=ContentResolver.openInputStream(uri);