Android第三方文件选择器aFileChooser使用方法详解

aFileChooser是android平台上的一个第三方文件选择器,其在github上的项目主页是:https://github.com/iPaulPro/aFileChooser

aFileChooser实现了在Android平台上高度可定制化的文件选择功能,aFileChooser在自己的项目代码中使用也比较简单。

写一个简单例子加以说明。

(1) 首先要配置Androidmanifest.xml文件:

 <activity
      android:name="com.ipaulpro.afilechooser.FileChooserActivity"
      android:enabled="@bool/use_activity"
      android:exported="true"
      android:icon="@drawable/ic_launcher"
      android:label="@string/choose_file" >
      <intent-filter>
        <action android:name="android.intent.action.GET_CONTENT" />

        <category android:name="android.intent.category.DEFAULT" />
        <category android:name="android.intent.category.OPENABLE" />

        <data android:mimeType="*/*" />
      </intent-filter>
    </activity>

最好把读写文件的权限一并加上:

<uses-permission android:name="android.permission.MOUNT_UNMOUNT_FILESYSTEMS" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />

(2) 在Java代码中直接调用:

首先要触发文件选择,startActivityForResult调用aFileChooser已经提供好的选择器:

 Intent getContentIntent = FileUtils.createGetContentIntent();
  Intent intent = Intent.createChooser(getContentIntent, "用aFileChooser选择文件");
  startActivityForResult(intent, REQUEST_CHOOSER);

然后在onActivityResult里面等待结果返回:

@Override
 protected void onActivityResult(int requestCode, int resultCode, Intent data) {
 switch (requestCode) {
 case REQUEST_CHOOSER:
  if (resultCode == RESULT_OK) {

  final Uri uri = data.getData();

  //此处返回的Uri包含的路径信息形如:content://com.android.providers.media.documents/document/image%3A16460
  Log.d("Uri", uri.toString());

  String path = FileUtils.getPath(this, uri);

  // Alternatively, use FileUtils.getFile(Context, Uri)
  if (path != null && FileUtils.isLocal(path)) {
   File file = new File(path);
   Toast.makeText(this, file.getAbsolutePath()+"", Toast.LENGTH_SHORT).show();
  }
  }
  break;
 }
 }

完整的代码:

package zhangphil.demo;

import java.io.File;

import com.ipaulpro.afilechooser.utils.FileUtils;

import android.app.Activity;
import android.content.Intent;
import android.net.Uri;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.widget.Toast;

public class MainActivity extends Activity {

 private static final int REQUEST_CHOOSER = 0x1234;

 @Override
 protected void onCreate(Bundle savedInstanceState) {
 super.onCreate(savedInstanceState);
 setContentView(R.layout.activity_main);

 findViewById(R.id.chooseButton).setOnClickListener(new View.OnClickListener() {

  @Override
  public void onClick(View v) {

  Intent getContentIntent = FileUtils.createGetContentIntent();
  Intent intent = Intent.createChooser(getContentIntent, "用aFileChooser选择文件");
  startActivityForResult(intent, REQUEST_CHOOSER);

  }
 });
 }

 @Override
 protected void onActivityResult(int requestCode, int resultCode, Intent data) {
 switch (requestCode) {
 case REQUEST_CHOOSER:
  if (resultCode == RESULT_OK) {

  final Uri uri = data.getData();

  //此处返回的Uri包含的路径信息形如:content://com.android.providers.media.documents/document/image%3A16460
  Log.d("Uri", uri.toString());

  String path = FileUtils.getPath(this, uri);

  // Alternatively, use FileUtils.getFile(Context, Uri)
  if (path != null && FileUtils.isLocal(path)) {
   File file = new File(path);
   Toast.makeText(this, file.getAbsolutePath()+"", Toast.LENGTH_SHORT).show();
  }
  }
  break;
 }
 }
}

aFileChooser另外一个比较有意义功能是:aFileChooser可以将Android 4.4及以上平台经由get content获取的Android形如:
content://com.android.providers.media.documents/document/image%3A16460的路径转化为人类可辨识的文件路径。此功能我在上面的示例代码中从log输出的那一行可知。

附文章:《Android设置头像,手机拍照或从本地相册选取图片作为头像》

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持我们。

(0)

相关推荐

  • Android中文件读写(输入流和输出流)操作小结

    1. Android中文件读写的原理: (1).所有文件的储存都是字节的储存. (2).在磁盘上保留的并不是文件的字符而是先把字符编码成字节,再储存这些字节到磁盘. (3).在读取文件(特别是文本文件)时,也是一个字节一个字节的读取以形成字节序列. 2. 字节流和字符流的区别: (1).字节流提供了处理任何类型的IO操作的功能,但它不能直接处理Unicode字符,字符流就可以. (2).字节流转换成字符流可以用InputStreamReader,OutputStreamWriter. 一般我们在

  • Android持久化技术之文件的读取与写入实例详解

    本文实例分析了Android持久化技术之文件的读取与写入操作.分享给大家供大家参考,具体如下: 1.文件存储 (1)在Android的持久化技术中,文件存储是最基本的一种数据存储方式. (2)对存储的内容部做任何处理,原样存储到文件中. (3)Context提供了文件写入与读取的方法,openFileOutput:写入到文件:openFileInput:从文件中读取. (4)文件写入时模式有多种:比如是覆盖写入还是追加写入等. (5)写入的文件默认存储在/data/data/报名/files/目

  • Android学习笔记-保存文件(Saving Files)

    Android设备有两种文件存储区域: 内部存储和外部存储 ("internal" and "external" storage). 这名字来自早期Android,那时大多数Android设备提供两种存储方式:内置的非易失的内存(内部存储)和可移动的存储例如micro SD卡(外部存储). 一些设备将永久内存分为内部和外部两部分,因此即使没有外部存储,依旧有两种存储空间.不管有没有外部存储,API的方法都是一样的. 如我的手机小米2S是16G大小的RAM,不支持SD

  • Android编程中File文件常见存储与读取操作demo示例

    本文实例讲述了Android编程中File文件常见存储与读取操作.分享给大家供大家参考,具体如下: MainActivity文件代码如下: package example.com.myapplication; import android.app.Activity; import android.os.Bundle; import android.view.View; import android.widget.Button; import android.widget.EditText; im

  • Android 读写文件方法汇总

    一. 从resource中的raw文件夹中获取文件并读取数据(资源文件只能读不能写) 复制代码 代码如下: String res = "";try{InputStream in = getResources().openRawResource(R.raw.bbi);//在\Test\res\raw\bbi.txt,int length = in.available();byte [] buffer = new byte[length];in.read(buffer);//res = E

  • android开发教程之获取power_profile.xml文件的方法(android运行时能耗值)

    系统的设置–>电池–>使用情况中,统计的能耗的使用情况也是以power_profile.xml的value作为基础参数的 1.我的手机中power_profile.xml的内容: HTC t328w 复制代码 代码如下: <?xml version="1.0" encoding="utf-8"?><device name="Android">    <item name="none"&

  • Android编程之文件读写操作与技巧总结【经典收藏】

    本文实例总结了Android文件读写操作.分享给大家供大家参考,具体如下: 在Android中的文件放在不同位置,它们的读取方式也有一些不同. 本文对android中对资源文件的读取.数据区文件的读取.SD卡文件的读取及RandomAccessFile的方式和方法进行了整理.供参考. 一.资源文件的读取: 1) 从resource的raw中读取文件数据: String res = ""; try{ //得到资源中的Raw数据流 InputStream in = getResources

  • Android编程实现文件浏览功能的方法【类似于FileDialog的功能】

    本文实例讲述了Android编程实现文件浏览功能的方法.分享给大家供大家参考,具体如下: 最近正在弄上传文件,当时想怎么能实现fileDialog的功能呢,打开文件,浏览文件,然后选择文件呢,查了好多资料,也看了不少论坛,都说里面没有这个功能,那真是奇怪了,里面没有这个功能,当然就需要自己动手添加这个功能了. 首先说一下这个文件浏览的简单实现原理: 首先选择一个目录做为根目录,然后打开此目录,常用的就是使用File这个类了,如下: File file=new File(path); 然后可以通过

  • Android文件选择器ExFilePicker的使用方法

    在新版的android中(如Android 7.0+),文件选择由于权限限制,Uri变化,文件资源路径格式改版等等,变得比较复杂起来,比如,得在Androidmanifest配置FileProvider完了还得写xml目录下的文件path这些等等.一些第三方的文件选择器,就算没有上面这些动作,一般也得在Androidmanifest写几个Activity.而ExFilePicker则无需上面的繁琐操作,一不需要在Androidmanifest里面定义FileProvider,二不需要写xml文件

  • Android开发实现Files文件读取解析功能示例

    本文实例讲述了Android开发实现Files文件读取解析功能.分享给大家供大家参考,具体如下: package com.example.file; import android.support.v7.app.AppCompatActivity; import android.os.Bundle; import android.util.Log; import android.view.View; import android.widget.Button; import android.widg

  • Android编程之文件的读写实例详解

    本文实例分析了Android编程之文件的读写方法.分享给大家供大家参考,具体如下: Android的文件读写与JavaSE的文件读写相同,都是使用IO流.而且Android使用的正是JavaSE的IO流,下面我们通过一个练习来学习Android的文件读写. 1.创建一个Android工程 Project name:File     BuildTarget:Android2.2     Application name:文件读写     Package name:test.file     Cre

随机推荐