_openFile() { // #ifdef APP-PLUS if (plus.os.name.toLowerCase() != "android") { uni.showModal({ title: '提示', content: '仅支持Android平台', success: function (res) {} }); returnfalse } let that = this // java 代码来自 http://www.cnblogs.com/panhouye/archive/2017/04/23/6751710.html let main = plus.android.runtimeMainActivity(); let Intent = plus.android.importClass("android.content.Intent"); // 选择文件
let fileIntent = new Intent(Intent.ACTION_GET_CONTENT) //fileIntent.setType(“image/*”);//选择图片 //fileIntent.setType(“audio/*”); //选择音频 //fileIntent.setType(“video/*”); //选择视频 (mp4 3gp 是android支持的视频格式) //fileIntent.setType(“video/*;image/*”);//同时选择视频和图片 //fileIntent.setType(”/*“); //无类型限制 Intent.ACTION_OPEN_DOCUMENT_TREE fileIntent.setType("*/*"); main.startActivityForResult(fileIntent, 1); // 获取回调 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 = ''; let type = "tree" 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) } // 回调 that.$emit('result', path) } // 4.4 以上 从Uri 获取文件绝对路径 functiongetPath(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 elseif (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); // return getDataColumn(context, contentUri, null, null); } // MediaProvider elseif (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; } elseif ("video" == type.toLowerCase()) { contentUri = MediaStore.Video.Media.EXTERNAL_CONTENT_URI; } elseif ("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) elseif ("content" == scheme) { return getDataColumn(context, uri, null, null); } // File elseif ("file" == scheme) { return uri.getPath(); } } // 4.4 以下 获取 绝对路径 functiongetRealPathFromURI(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 查找出绝对路径 functiongetDataColumn(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); } } functionisExternalStorageDocument(uri) { return"com.android.externalstorage.documents" == uri.getAuthority() ? true : false } functionisDownloadsDocument(uri) { return"com.android.providers.downloads.documents" == uri.getAuthority() ? true : false } functionisMediaDocument(uri) { return"com.android.providers.media.documents" == uri.getAuthority() ? true : false } } // #endif // #ifndef APP-PLUS uni.showModal({ title: '提示', content: '仅支持Android平台', success: function (res) {
_openFile() { // #ifdef APP-PLUS if (plus.os.name.toLowerCase() != "android") { uni.showModal({ title: '提示', content: '仅支持Android平台', success: function (res) {} }); returnfalse } let that = this // java 代码来自 http://www.cnblogs.com/panhouye/archive/2017/04/23/6751710.html let main = plus.android.runtimeMainActivity(); let Intent = plus.android.importClass("android.content.Intent"); let fileIntent = new Intent(Intent.ACTION_OPEN_DOCUMENT_TREE) fileIntent.putExtra(Intent.EXTRA_LOCAL_ONLY, true); fileIntent.putExtra("android.content.extra.SHOW_ADVANCED", true); main.startActivityForResult(fileIntent, 1); // 获取回调 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 Environment = plus.android.importClass("android.os.Environment"); let DocumentsContract = plus.android.importClass("android.provider.DocumentsContract"); // 给系统导入 contentResolver let contentResolver = main.getContentResolver() plus.android.importClass(contentResolver); // 返回路径 let path = ''; if (resultCode == Activity.RESULT_OK) { let uri = data.getData() path = getTreePath(this, uri) // 回调 that.$emit('result', path) } functiongetTreePath(context, uri){ console.log(uri.getAuthority()) //uri = DocumentsContract.buildDocumentUriUsingTree(uri, DocumentsContract.getDocumentId(uri)) let docId = DocumentsContract.getTreeDocumentId(uri); console.log(docId) let split = docId.split(":"); let type = split[0]; // 如果是手机内部存储 if ("primary" == type.toLowerCase()) { console.log(Environment.getExternalStorageDirectory() + "/" + split[1]) return Environment.getExternalStorageDirectory() + "/" + split[1]; } else { return'/storage/' + type + "/" + split[1]; } } } // #endif // #ifndef APP-PLUS uni.showModal({ title: '提示', content: '仅支持Android平台', success: function (res) {