当前位置: 首页 > news >正文

wordpress发送邮箱软件网站推广seo优化

wordpress发送邮箱软件,网站推广seo优化,引流推广什么意思,网站二级导航制作超级轻量级FilePicker测试没有问题 本文摘录于:https://blog.csdn.net/gitblog_00365/article/details/141449437只是做学习备份之用,绝无抄袭之意,有疑惑请联系本人! 今天真的是发了疯的找文件管理器,因为调用系统自带的文件管理…

超级轻量级FilePicker测试没有问题

本文摘录于:https://blog.csdn.net/gitblog_00365/article/details/141449437只是做学习备份之用,绝无抄袭之意,有疑惑请联系本人!
今天真的是发了疯的找文件管理器,因为调用系统自带的文件管理器老是有问题,所以越调越着急,最后发现还是FilePicker简单好用,代码仓库地址:https://gitcode.com/gh_mirrors/andr/android-filepicker/overview?utm_source=artical_gitcode&index=top&type=card&webUrl
步骤很简单,第一步添加依赖
首先,在你的项目的 build.gradle (Module) 文件中的 dependencies 块添加如下依赖:

implementation 'com.github.angads25:filepicker:1.1.0'

然后在代码黄总增加如下内容(原文内容):

import com.angads25.filepicker.model.FilePath;
import com.angads25.filepicker.view.FilePickerFragment;...// 在某个方法内启动FilePicker
private void chooseFile() {FilePickerFragment filePickerFragment = FilePickerFragment.newInstance();filePickerFragment.setFileType(FilePickerFragment.FILE_TYPE_ALL);filePickerFragment.setOnFilePathSelectedListener(new FilePickerFragment.OnFilePathSelectedListener() {@Overridepublic void onFilePathSelected(List<FilePath> filePaths) {// 处理选择的文件路径for (FilePath fp : filePaths) {Log.d("MyApp", "Selected Path: " + fp.getPath());}}});filePickerFragment.show(getSupportFragmentManager(), "FILE_PICKER");
}

我自己的代码如下:

public void onClickSelectFile(View view) {Toast.makeText(getApplicationContext(), "请选择bin格式文件", Toast.LENGTH_SHORT).show();DialogProperties properties = new DialogProperties();properties.selection_mode = DialogConfigs.SINGLE_MODE;properties.selection_type = DialogConfigs.FILE_SELECT;properties.root = new File("/sdcard");properties.error_dir = new File(DialogConfigs.DEFAULT_DIR);properties.offset = new File(DialogConfigs.DEFAULT_DIR);String[] extensions = {"bin",};properties.extensions = extensions;FilePickerDialog dialog = new FilePickerDialog(OTA_Active.this, properties);dialog.setTitle("请选择bin格式文件");dialog.setDialogSelectionListener(new DialogSelectionListener() {@Overridepublic void onSelectedFilePaths(String[] files) {// files数组包含了用户由应用程序选择的文件路径。String path=files[0];if(path!="") {int start = path.lastIndexOf("/");if (start != -1 ) {FileNameList.add(path.substring(start + 1));FilePathList.add(path);ArrayAdapter<String> array = new ArrayAdapter(OTA_Active.this, android.R.layout.simple_list_item_1, FileNameList);listview.setAdapter(array);OTA_Active.this.runOnUiThread(new Runnable() {@Overridepublic void run() {//此时已在主线程中,可以更新UI了AdapterView.OnItemClickListener onItemClickListener = listview.getOnItemClickListener();if(onItemClickListener!=null){onItemClickListener.onItemClick(listview,null,listview.getCount()-1,0);}}});}}}});dialog.show();}

本章节的源码可以从如下地址下载:https://download.csdn.net/download/chengdong1314/89943454
测试确实可行,使用起来完全没问题,视频操作演示如下:

选择文件操作

挣扎解决自带文件管理器获取不到绝对地址问题

非常无奈按照网上的方法调用系统自带的文件管理器选择文件的时候总会这样返回msf%3A1000038197之类的数据,比如如下:

content://com.android.providers.downloads.documents/document/msf%3A1000038197

本文摘录于:https://cloud.tencent.com/developer/article/2003648只是做学习备份之用,绝无抄袭之意,有疑惑请联系本人!
这里根据上面的文章调用如下函数:

    public static File uriToFileApiQ(Uri uri, Context context) {File file = null;if (uri == null) return file;//android10以上转换if (uri.getScheme().equals(ContentResolver.SCHEME_FILE)) {file = new File(uri.getPath());} else if (uri.getScheme().equals(ContentResolver.SCHEME_CONTENT)) {//把文件复制到沙盒目录ContentResolver contentResolver = context.getContentResolver();String displayName = System.currentTimeMillis() + Math.round((Math.random() + 1) * 1000)+ "." + MimeTypeMap.getSingleton().getExtensionFromMimeType(contentResolver.getType(uri));try {InputStream is = contentResolver.openInputStream(uri);File cache = new File(context.getCacheDir().getAbsolutePath(), displayName);FileOutputStream fos = new FileOutputStream(cache);FileUtils.copy(is, fos);file = cache;fos.close();is.close();} catch (IOException e) {e.printStackTrace();}}return file;}

这样调用uriToFileApiQ函数:

protected void onActivityResult(int requestCode, int resultCode, Intent data) {super.onActivityResult(requestCode, resultCode, data);if (resultCode == Activity.RESULT_OK) {Uri uri = data.getData();if (Build.VERSION.SDK_INT > Build.VERSION_CODES.KITKAT) {//4.4以后File fi = uriToFileApiQ(this, uri);path=fi.getPath();} else {//4.4以下下系统调用方法path = getRealPathFromURI(uri);}int index = path.lastIndexOf('.');if (index > 0) {if(!("bin".equals(path.substring(index + 1))))return;}else  return;if(path!="") {int start = path.lastIndexOf("/");if (start != -1 ) {FileNameList.add(path.substring(start + 1));FilePathList.add(path);ArrayAdapter<String> array = new ArrayAdapter(OTA_Active.this, android.R.layout.simple_list_item_1, FileNameList);listview.setAdapter(array);AdapterView.OnItemClickListener onItemClickListener = listview.getOnItemClickListener();if(onItemClickListener!=null){onItemClickListener.onItemClick(listview,null,listview.getCount()-1,0);}}}}}

onActivityResult是这样引起的:

    public void onClickSelectFile(View view) {Toast.makeText(getApplicationContext(), "请选择bin格式文件", Toast.LENGTH_SHORT).show();Intent intent = new Intent(Intent.ACTION_GET_CONTENT);intent.setType("*/*");//无类型限制intent.addCategory(Intent.CATEGORY_OPENABLE);startActivityForResult(intent, 1);}

上面的uriToFileApiQ函数是有缺陷的,FileUtils.copy(is, fos);函数报错了,如果改成FileUtils.copy(is.tostring(), fos.tostring());确实编译没错了,但是拷贝到沙盒里面的文件大小是0,拷贝出错!
在这里插入图片描述
无奈啊,我这时候都放弃了,又去本文第一节去尝试了一圈,搞定了自定义文件管理器的问题,但是客户又说一定要自带的资源管理器,可以打开最近的文件,无奈只能够死磕这个问题!!!
最后找呀找,找到这篇文章:https://www.bytezonex.com/archives/b8w3-cvz.html
这里说明了原来的拷贝错误的原因:
Android 10 获取文件路径难题:/document/msf: 解决方案

许多开发者在 Android 10 设备上使用 Intent.ACTION_GET_CONTENT 获取文件路径时,都会遇到返回路径形如 /document/msf: 的情况,令人困惑不已。这并非应用本身的错误,而是 Android 10 为了加强隐私保护而采取的新策略。本文将深入剖析这一变化背后的原因,并提供一套完整的解决方案,帮助你绕过障碍,顺利获取目标文件。

从文件路径到 URI:Android 10 文件访问机制的转变
在 Android 10 之前,应用能够通过文件路径直接访问设备上的绝大多数文件,这种方式虽然便捷,但也存在着巨大的安全隐患,容易造成用户隐私泄露。为了提升系统安全性,Android 10 引入了分区存储机制,限制应用直接访问外部存储空间。

新的机制下,当应用使用 Intent.ACTION_GET_CONTENT 选择文件时,系统不再返回直接的文件路径,而是返回一个 content:// 格式的 URI。这个 URI 指向一个由 MediaStore 管理的中间层,应用无法直接从中获取文件路径,相当于在应用和真实文件之间建立了一道安全屏障。

神秘的 /document/msf: :特殊文件的安全处理
/document/msf: 正是 Android 10 返回的一种特殊 URI,它通常代表着应用选择的并非媒体文件(例如图片、视频),而是其他类型的文件。由于系统无法确定应用如何使用这些文件,为了最大程度地保护用户隐私,系统选择不直接提供文件路径,而是返回这个特殊的 URI,将文件访问权限牢牢掌握在自己手中。

ContentResolver 和 InputStream:突破封锁的利器
想要在 Android 10 上顺利获取文件内容,我们需要借助 Android 系统提供的 ContentResolver 和 InputStream 这两大利器。

操作步骤:

获取 ContentResolver: 通过 context.contentResolver 获取 ContentResolver 实例,相当于获取了与 MediaStore 通信的桥梁。
打开 InputStream: 使用 ContentResolver.openInputStream(uri) 方法,将获取的 content:// URI 传递进去,打开一个指向目标文件的 InputStream,相当于在安全屏障上打开了一条通道,文件内容将通过这条通道流向应用。
读取文件内容: 使用 InputStream 的 read() 方法,如同读取水流一般,将文件内容源源不断地读取出来,供应用使用。
整体思路就是通过InputStream 把数据从外部储存转写到沙盒来,最后修改uriToFileApiQ函数如下:

   public static File uriToFileApiQ(Context context,Uri uri) {File file = null;if(uri == null) return file;//android10以上转换if (uri.getScheme().equals(ContentResolver.SCHEME_FILE)) {file = new File(uri.getPath());} else if (uri.getScheme().equals(ContentResolver.SCHEME_CONTENT)) {//把文件复制到沙盒目录ContentResolver contentResolver = context.getContentResolver();
//            String displayName = System.currentTimeMillis()+ Math.round((Math.random() + 1) * 1000)
//                    +"."+ MimeTypeMap.getSingleton().getExtensionFromMimeType(contentResolver.getType(uri));//            注释掉的方法可以获取到原文件的文件名,但是比较耗时Cursor cursor = contentResolver.query(uri, null, null, null, null);String displayName="";if (cursor.moveToFirst()) {displayName = cursor.getString(cursor.getColumnIndex(OpenableColumns.DISPLAY_NAME));}try {InputStream in = contentResolver.openInputStream(uri);File cache = new File(context.getCacheDir().getAbsolutePath(), displayName);FileOutputStream out = new FileOutputStream(cache);//FileUtils.copy(in.toString(), out.toString());int len=-1;byte[] b=new byte[512*1024];while((len=in.read(b))!=-1){out.write(b,0,len);}file = cache;in.close();out.close();} catch (IOException e) {e.printStackTrace();}}return file;}

这里测试到拷贝过来的文件大小就对了,到此问题成功解决!
在这里插入图片描述
本章节的安卓源码从如下地址下载:https://download.csdn.net/download/chengdong1314/89943485
视频操作如下:

http://www.dinnco.com/news/74412.html

相关文章:

  • 网站建设团队百度推广电话
  • 白鹭引擎可以做网站吗产品推广平台
  • 成都直销网站开发谷歌广告代理公司
  • 深圳企业官方网站建设搜索广告是什么
  • 定制网站开发接活成人职业技能培训学校
  • 小说网站seo排名怎么做微信视频号小店
  • dw做的网站如何上传云服务湖南专业seo优化
  • 网站做多个镜像seo优化排名价格
  • 学生网站设计广州seo成功案例
  • 做微商在哪个网站打广告好免费个人网站建站申请
  • 做外贸的免费网站项目营销推广策划
  • 网站建设立项说明书外贸平台自建站
  • 做视频网站需要哪些证广州百度
  • 怎么创建网站免费生成短链接
  • 手机网站建设怎么设计接广告推广的平台
  • 南昌做网站的公司有哪些中牟网络推广外包
  • 电子商务从事什么工作深圳网站关键词优化公司
  • 做鞋子批发网站有哪些友链
  • 宝鸡做网站哪家公司好产品推广哪个平台好
  • gif表情包制作网站seoul是什么品牌
  • 微网站如何做微信支付宝支付网络广告营销的案例
  • 名片在哪个网站做google谷歌搜索
  • 慈溪做网站公司100个免费推广b站
  • 杭州做网站的公司有哪些发布广告的平台免费
  • php mysql做网站登录百度投放平台
  • 周到的宁波网站建设标题seo是什么意思
  • wordpress主题演示站网站关键词排名查询
  • win7dw做asp购物网站新产品推广方式有哪些
  • 公司网站用个人备案 2018seo整站优化方案
  • 兰州网站做的好点的公司seo怎么收费的