主机如何做服务器建网站北京网站搭建报价
2026/2/25 8:59:11 网站建设 项目流程
主机如何做服务器建网站,北京网站搭建报价,网站的统计代码是什么意思,wordpress多用途主题排行文章目录一、首先你需要先看到效果二、实现原理一、发送数据二、两种方式三、接收数据三、工具类一、首先你需要先看到效果 就是将你的 activity 添加到打开方式#xff0c;比如我这里有两个 activity#xff0c;PdfViewerActivity 负责打开 pdf 文件#xff0c;OfficeViewe…文章目录一、首先你需要先看到效果二、实现原理一、发送数据二、两种方式三、接收数据三、工具类一、首先你需要先看到效果就是将你的 activity 添加到打开方式比如我这里有两个 activityPdfViewerActivity 负责打开 pdf 文件OfficeViewerActivity 负责打开 wordexcelppt 文件activityandroid:name.activity.PdfViewerActivityandroid:exportedtrueandroid:screenOrientationportraitintent-filteractionandroid:nameandroid.intent.action.VIEW/categoryandroid:nameandroid.intent.category.DEFAULT/categoryandroid:nameandroid.intent.category.BROWSABLE/dataandroid:mimeTypeapplication/pdf//intent-filter/activityactivityandroid:name.activity.OfficeViewerActivityandroid:exportedtrueandroid:screenOrientationportraitintent-filteractionandroid:nameandroid.intent.action.VIEW/categoryandroid:nameandroid.intent.category.DEFAULT/categoryandroid:nameandroid.intent.category.BROWSABLE/!-- Word --dataandroid:mimeTypeapplication/msword/dataandroid:mimeTypeapplication/vnd.openxmlformats-officedocument.wordprocessingml.document/!-- Excel --dataandroid:mimeTypeapplication/vnd.ms-excel/dataandroid:mimeTypeapplication/vnd.openxmlformats-officedocument.spreadsheetml.sheet/!-- PowerPoint --dataandroid:mimeTypeapplication/vnd.ms-powerpoint/dataandroid:mimeTypeapplication/vnd.openxmlformats-officedocument.presentationml.presentation//intent-filter/activity二、实现原理一、发送数据Manifest 配置完成后如果调起了系统打开方式系统会这样发送数据Intent{actionACTION_VIEWdatacontent://xxx/xxx//代表文件的 uritypeapplication/pdf//代表文件类型}二、两种方式自己伪装成系统系统打开方式发送数据// 把 File 转成 content:// Uri和系统行为一致valuriFileProvider.getUriForFile(activity,${activity.packageName}.fileprovider,file)// 构造 ACTION_VIEW Intent系统打开方式标准格式valintentIntent(Intent.ACTION_VIEW).apply{setDataAndType(uri,application/pdf)addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION)addFlags(Intent.FLAG_ACTIVITY_NEW_TASK)}// 发起跳转activity.startActivity(intent)有什么区别Intent{actionandroid.intent.action.VIEWdatacontent://your.package.fileprovider/...typeapplication/pdf}Intent{actionandroid.intent.action.VIEWdatacontent://com.android.providers.downloads.documents/document/1234typeapplication/pdf}可以这样判断uri.authority${context.packageName}.fileprovider三、接收数据在相应的页面接收数据valuri:Uriintent.data?:returnvalinputStreamcontentResolver.openInputStream(uri)如果你必须要使用文件真实路径而不用 uri可通过 uri 复制文件到一个目录得到funcopyUriToCache(context:Context,uri:Uri):File{valfileNamegetFileName(context,uri)?:temp_filevaldestFileFile(context.cacheDir,fileName)context.contentResolver.openInputStream(uri)?.use{input-destFile.outputStream().use{output-input.copyTo(output)}}returndestFile}获取文件名fungetFileName(context:Context,uri:Uri):String?{valcursorcontext.contentResolver.query(uri,arrayOf(OpenableColumns.DISPLAY_NAME),null,null,null)cursor?.use{if(it.moveToFirst()){returnit.getString(0)}}returnnull}三、工具类// 获取传入的文件路径和文件名// 优先从 extra 获取应用内调用,就是我们常用的 activity 之间跳转传参varfilePathintent.getStringExtra(EXTRA_PDF_FILE_PATH)?:varfileNameintent.getStringExtra(EXTRA_PDF_FILE_NAME)?:// 如果 extra 中没有文件路径尝试从 Intent.data URI 获取系统打开方式调用if(filePath.isEmpty()intent.data!null){filePathUriFileResolver.getFilePathFromUri(this,intent.data!!)if(fileName.isEmpty()){// 从文件路径中提取文件名fileNameFile(filePath).name}}/** * Uri 文件路径解析工具 * * 设计原则 * - 不根据系统版本做假设 * - 能直接获取真实路径就直接用 * - 获取不到再复制到 App 私有缓存目录 * * 适用于 * - 系统“打开方式” * - 第三方文件管理器 * - 应用内 FileProvider */objectUriFileResolver{/** * 从 Uri 获取一个可用的文件路径 * * return 文件路径失败返回空字符串 */fungetFilePathFromUri(context:Context,uri:Uri):String{returnwhen(uri.scheme){ContentResolver.SCHEME_FILE-{uri.path?:}ContentResolver.SCHEME_CONTENT-{try{// 1️⃣ 自家 FileProvider直接还原真实路径零拷贝if(isOwnFileProvider(context,uri)){resolveFromFileProvider(context,uri)?.let{returnit}}// 2️⃣ 尝试通过 MediaStore 获取真实路径不做版本假设valmediaPathgetFilePathFromMediaStore(context,uri)if(mediaPath.isNotEmpty()){returnmediaPath}// 3️⃣ 拿不到路径复制到缓存目录兜底copyUriToTempFile(context,uri)}catch(e:Exception){}}else-}}// FileProvider privatefunisOwnFileProvider(context:Context,uri:Uri):Boolean{returnuri.authority${context.packageName}.fileprovider}/** * 解析自家 FileProvider Uri * * content://authority/path_name/relative_path */privatefunresolveFromFileProvider(context:Context,uri:Uri):String?{valsegmentsuri.pathSegmentsif(segments.isEmpty())returnnullvalrootsegments[0]valrelativePathif(segments.size1)segments.subList(1,segments.size).joinToString(File.separator)elsevalbaseDirwhen(root){files-context.filesDircache-context.cacheDirexternal_files-context.getExternalFilesDir(null)external_cache-context.externalCacheDirelse-null}?:returnnullreturnif(relativePath.isNotEmpty()){File(baseDir,relativePath).absolutePath}else{baseDir.absolutePath}}// MediaStore /** * 尝试从 MediaStore 查询真实文件路径 * * 注意 * - 高版本系统上不保证一定成功 * - 能成功就直接用失败交给兜底方案 */privatefungetFilePathFromMediaStore(context:Context,uri:Uri):String{varcursor:Cursor?nullreturntry{cursorcontext.contentResolver.query(uri,arrayOf(MediaStore.Files.FileColumns.DATA),null,null,null)if(cursor!nullcursor.moveToFirst()){valindexcursor.getColumnIndex(MediaStore.Files.FileColumns.DATA)if(index0)cursor.getString(index)?:else}else{}}catch(e:Exception){}finally{cursor?.close()}}// Copy /** * 将 Uri 指向的文件复制到 App 缓存目录 */privatefuncopyUriToTempFile(context:Context,uri:Uri):String{returntry{valtempDirFile(context.cacheDir,temp_files)if(!tempDir.exists()){tempDir.mkdirs()}varfileNamegetFileNameFromUri(context,uri)if(fileName.isEmpty()){fileNametemp_${System.currentTimeMillis()}}valtempFileFile(tempDir,fileName)if(tempFile.exists()){returntempFile.absolutePath}context.contentResolver.openInputStream(uri)?.use{input-tempFile.outputStream().use{output-input.copyTo(output)}}tempFile.absolutePath}catch(e:Exception){}}// File name privatefungetFileNameFromUri(context:Context,uri:Uri):String{varfileNametry{context.contentResolver.query(uri,null,null,null,null)?.use{cursor-if(cursor.moveToFirst()){valindexcursor.getColumnIndex(MediaStore.Files.FileColumns.DISPLAY_NAME)if(index0){fileNamecursor.getString(index)?:}}}if(fileName.isEmpty()){uri.path?.let{fileNameit.substringAfterLast(/)}}}catch(e:Exception){}returnfileName}}

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询