183 lines
6.7 KiB
Vue
183 lines
6.7 KiB
Vue
<template xlang="wxml" minapp="mpvue">
|
||
<view>
|
||
</view>
|
||
</template>
|
||
<script>
|
||
export default {
|
||
name: 'tki-file-manager',
|
||
props: {},
|
||
data() {
|
||
return {
|
||
}
|
||
},
|
||
methods: {
|
||
_openFile() {
|
||
// #ifdef APP-PLUS
|
||
if (plus.os.name.toLowerCase() != "android") {
|
||
uni.showModal({
|
||
title: '提示',
|
||
content: '仅支持Android平台',
|
||
success: function (res) {}
|
||
});
|
||
return false
|
||
}
|
||
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("*/*"); //无类型限制
|
||
fileIntent.addCategory(Intent.CATEGORY_OPENABLE);
|
||
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 = '';
|
||
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 获取文件绝对路径
|
||
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);
|
||
// return getDataColumn(context, contentUri, null, null);
|
||
}
|
||
// 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
|
||
}
|
||
}
|
||
// #endif
|
||
// #ifndef APP-PLUS
|
||
uni.showModal({
|
||
title: '提示',
|
||
content: '仅支持Android平台',
|
||
success: function (res) {
|
||
|
||
}
|
||
});
|
||
// #endif
|
||
},
|
||
},
|
||
onLoad() {
|
||
// plus.io.resolveLocalFileSystemURL( '/storage/emulated/0', function(fs) {
|
||
// var directoryReader = fs.createReader();
|
||
// directoryReader.readEntries(function(entries) {
|
||
// var i;
|
||
// for (i = 0; i < entries.length; i++) {
|
||
// console.log(entries[i].name);
|
||
// }
|
||
// }, function(e) {
|
||
// console.log("Read entries failed: " + e.message);
|
||
// });
|
||
// }, function(e) {
|
||
// console.log("Request file system failed: " + e.message);
|
||
// });
|
||
}
|
||
}
|
||
</script> |