Android第三方文件选择器:aFileChooser

Android第三方文件选择器:aFileChooser



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输出的那一行可知。

附录文章:
1,《Android设置头像,手机拍照或从本地相册选取图片作为头像》链接地址:http://blog.csdn.net/zhangphil/article/details/44829747



版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/108981.html原文链接:https://javaforall.cn

【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛

【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...

(0)


相关推荐

  • kworker进程_线程池队列类型

    kworker进程_线程池队列类型工作队列是另一种将工作推后执行的形式,它可以把工作交给一个内核线程去执行,这个下半部是在进程上下文中执行的,因此,它可以重新调度还有睡眠。    区分使用软中断/tasklet还是工作队列比较简单,如果推后的工作不需要睡眠,那么就选择软中断或tasklet,但如果需要一个可以重新调度,可以睡眠,可以获取内存,可以获取信号量,可以执行阻塞式I/O操作时,那么,请选择工作队列吧!    在老的

  • qtcpsocket编程_qtcpsocket判断连接状态

    qtcpsocket编程_qtcpsocket判断连接状态QTcpSocket和QTcpServer类实现了Qt的Tcp客户端和服务器。 tcp是一个流式协议。对于应用程序来说,数据是一个很长的流,有点像一个巨大的文件。 搞成此的协议建立在面向块的tcp协议(Block-oriented)或面向行(Line-oriented)的tcp协议上。 面向块的tcp协议,数据被当作一个2进制的块来传输。没每一个块被当作一个定义了大小的,后面

  • php storm2021.10激活码(JetBrains全家桶)「建议收藏」

    (php storm2021.10激活码)这是一篇idea技术相关文章,由全栈君为大家提供,主要知识点是关于2021JetBrains全家桶永久激活码的内容IntelliJ2021最新激活注册码,破解教程可免费永久激活,亲测有效,下面是详细链接哦~https://javaforall.cn/100143.htmlH2AE5L25Z5-eyJsa…

  • 用什么代替整流桥mb10f_kbl10整流桥

    用什么代替整流桥mb10f_kbl10整流桥编辑-ZMB10F是在MB10S系列基础上根据用户需求开发生产的新型号。从参数功能上看,MB10F就像是瘦身成功的MB10S,那么哪个比较好?ASEMI整流桥MB10S和MB10F详细对比:整流桥MB10S和MB10F的电气参数相同:正向电流(Io)为1A,反向电压为1000V,正向电压(VF)为1.0V,采用GPP芯片材料,其中有4个芯片,芯片尺寸为46MIL,其浪涌电流Ifsm为30A,漏电流(Ir)为5uA,工作温度为-40~+150℃,恢复时间(Trr)为500ns,有4条引线在里面

  • 【设计模式】Template Method模式

    【设计模式】Template Method模式

  • 面试题:MySQL的union all和union有什么区别、MySQL有哪几种join方式(阿里面试题)[通俗易懂]

    面试题:MySQL的union all和union有什么区别、MySQL有哪几种join方式(阿里面试题)[通俗易懂]面试题:MySQL的union all和union有什么区别、MySQL有哪几种join方式(阿里面试题)————————————————————————————————————————————————-…

发表回复

您的电子邮箱地址不会被公开。

关注全栈程序员社区公众号