界面中开发系统文件并获得URI

来源:互联网 发布:会议室预约系统 源码 编辑:程序博客网 时间:2024/05/23 01:19

现在界面上通过点击一个按钮事件来选择文件(如在发邮件时用来选择附件并获得附件的文件目录地址)

这里有可行的一段代码:

// 添加附件
  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中赋予其更广阔的含义,先看个例子,如下:
URI

 

 

将其分为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);

0 0
原创粉丝点击