You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

209 lines
6.9 KiB

/* 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 */