Android第三方文件选择器aFileChooser使用方法详解
程序员文章站
2022-06-22 10:10:05
afilechooser是android平台上的一个第三方文件选择器,其在github上的项目主页是:https://github.com/ipaulpro/afilech...
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设置头像,手机拍照或从本地相册选取图片作为头像》
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。