/* eslint-disable */ var pickFile = { //调用原生文件系统管理器并选取文件获取文件地址 PickFile: function(callback, mimeTypes) { console.log(plus) if (plus.os.name.toLowerCase() != "android") { uni.showModal({ title: "提示", content: "仅支持Android平台", success: function(res) {}, }); return false; } let that = this; let main = plus.android.runtimeMainActivity(); let Intent = plus.android.importClass("android.content.Intent"); let fileIntent = new Intent(Intent.ACTION_GET_CONTENT); /** * let mimeType = ["image/*", "application/*|text/*","application/vnd.ms-powerpoint", * "application/vnd.openxmlformats-officedocument.presentationml.presentation",]; * */ let mimeType = [ // "image/png", // "image/jpg", // "image/jpeg", // "application/msword", // "application/vnd.openxmlformats-officedocument.wordprocessingml.document", // "application/vnd.ms-excel", // "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet", "application/pdf", ]; fileIntent.setType("*/*"); //无类型限制 // fileIntent.setType("application/*"); // fileIntent.setType(mineType); fileIntent.putExtra(Intent.EXTRA_MIME_TYPES, mimeType); fileIntent.addCategory(Intent.CATEGORY_OPENABLE); main.startActivityForResult(fileIntent, 10000); let _this = pickFile; // 获取回调 main.onActivityResult = function(requestCode, resultCode, data) { let Activity = plus.android.importClass("android.app.Activity"); let ContentUris = plus.android.importClass("android.content.ContentUris"); let Cursor = plus.android.importClass("android.database.Cursor"); let Uri = plus.android.importClass("android.net.Uri"); let Build = plus.android.importClass("android.os.Build"); let Environment = plus.android.importClass("android.os.Environment"); let DocumentsContract = plus.android.importClass( "android.provider.DocumentsContract" ); let MediaStore = plus.android.importClass("android.provider.MediaStore"); // 给系统导入 contentResolver let contentResolver = main.getContentResolver(); plus.android.importClass(contentResolver); // 返回路径 let path = ""; if (resultCode == Activity.RESULT_OK) { let uri = data.getData(); if ("file" == uri.getScheme().toLowerCase()) { //使用第三方应用打开 path = uri.getPath(); return; } if (Build.VERSION.SDK_INT > Build.VERSION_CODES.KITKAT) { //4.4以后 path = getPath(this, uri); } else { //4.4以下下系统调用方法 path = getRealPathFromURI(uri); } // 回调 console.warn("path---------->", path); // 获取file:///本地文件大小 getFileSize(path); // that.$emit("result", path); } // 4.4 以上 从Uri 获取文件绝对路径 function getPath(context, uri) { let isKitKat = Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT; let scheme = uri.getScheme().toLowerCase(); if (isKitKat && DocumentsContract.isDocumentUri(context, uri)) { // ExternalStorageProvider if (isExternalStorageDocument(uri)) { let docId = DocumentsContract.getDocumentId(uri); let split = docId.split(":"); let type = split[0]; // 如果是手机内部存储 if ("primary" == type.toLowerCase()) { return Environment.getExternalStorageDirectory() + "/" + split[1]; } else { return "/storage/" + type + "/" + split[1]; } } // DownloadsProvider else if (isDownloadsDocument(uri)) { let id = DocumentsContract.getDocumentId(uri); let split = id.split(":"); return split[1]; // console.log(id) // let contentUri = ContentUris.withAppendedId(Uri.parse("content://downloads/public_downloads"), id); } // MediaProvider else if (isMediaDocument(uri)) { let docId = DocumentsContract.getDocumentId(uri); let split = docId.split(":"); let type = split[0]; let contentUri = null; if ("image" == type.toLowerCase()) { contentUri = MediaStore.Images.Media.EXTERNAL_CONTENT_URI; } else if ("video" == type.toLowerCase()) { contentUri = MediaStore.Video.Media.EXTERNAL_CONTENT_URI; } else if ("audio" == type.toLowerCase()) { contentUri = MediaStore.Audio.Media.EXTERNAL_CONTENT_URI; } let selection = "_id=?"; let selectionArgs = [split[1]]; return getDataColumn(context, contentUri, selection, selectionArgs); } } // MediaStore (and general) else if ("content" == scheme) { return getDataColumn(context, uri, null, null); } // File else if ("file" == scheme) { return uri.getPath(); } } // 4.4 以下 获取 绝对路径 function getRealPathFromURI(uri) { let res = null; let proj = [MediaStore.Images.Media.DATA]; let cursor = contentResolver.query(uri, proj, null, null, null); if (null != cursor && cursor.moveToFirst()) { let column_index = cursor.getColumnIndexOrThrow( MediaStore.Images.Media.DATA ); res = cursor.getString(column_index); cursor.close(); } return res; } // 通过uri 查找出绝对路径 function getDataColumn(context, uri, selection, selectionArgs) { let cursor = null; let column = "_data"; let projection = [column]; // let contentResolver = context.getContentResolver() // plus.android.importClass(contentResolver); cursor = contentResolver.query( uri, projection, selection, selectionArgs, null ); if (cursor != null && cursor.moveToFirst()) { let column_index = cursor.getColumnIndexOrThrow(column); return cursor.getString(column_index); } } function isExternalStorageDocument(uri) { return "com.android.externalstorage.documents" == uri.getAuthority() ? true : false; } function isDownloadsDocument(uri) { return "com.android.providers.downloads.documents" == uri.getAuthority() ? true : false; } function isMediaDocument(uri) { return "com.android.providers.media.documents" == uri.getAuthority() ? true : false; } /* 获取文件大小 */ function getFileSize(filePath) { const File = plus.android.importClass("java.io.File"); let file = new File(filePath); // console.warn(file.length()); // 回调 callback(filePath, convertfilesize(file.length())); } /* 文件size转换 */ function convertfilesize(size) { //把字节转换成正常文件大小 if (!size) return ""; var num = 1024.0; //byte if (size < num) return size + "B"; if (size < Math.pow(num, 2)) return (size / num).toFixed(2) + "KB"; //kb if (size < Math.pow(num, 3)) return (size / Math.pow(num, 2)).toFixed(2) + "MB"; //M if (size < Math.pow(num, 4)) return (size / Math.pow(num, 3)).toFixed(2) + "G"; //G return (size / Math.pow(num, 4)).toFixed(2) + "T"; //T } }; }, }; module.exports = { pickFile: pickFile, }; /* eslint-disable no-new */