94 lines
4.7 KiB
JavaScript
94 lines
4.7 KiB
JavaScript
export function chooseFile(callback, acceptType) {
|
|
|
|
var CODE_REQUEST = 1000;
|
|
var main = plus.android.runtimeMainActivity();
|
|
if (plus.os.name == 'Android') {
|
|
console.log("666");
|
|
var Intent = plus.android.importClass('android.content.Intent');
|
|
var intent = new Intent(Intent.ACTION_GET_CONTENT);
|
|
intent.addCategory(Intent.CATEGORY_OPENABLE);
|
|
if (acceptType) {
|
|
intent.setType(acceptType);
|
|
} else {
|
|
intent.setType("*/*");
|
|
}
|
|
main.onActivityResult = (requestCode, resultCode, data) => {
|
|
if (requestCode == CODE_REQUEST) {
|
|
const uri = data.getData();
|
|
plus.android.importClass(uri);
|
|
const Build = plus.android.importClass('android.os.Build');
|
|
const isKitKat = Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT;
|
|
const DocumentsContract = plus.android.importClass('android.provider.DocumentsContract');
|
|
if (isKitKat && DocumentsContract.isDocumentUri(main, uri)) {
|
|
if ("com.android.externalstorage.documents" == uri.getAuthority()) {
|
|
console.log("6666");
|
|
var docId = DocumentsContract.getDocumentId(uri);
|
|
var split = docId.split(":");
|
|
var type = split[0];
|
|
|
|
if ("primary" == type) {
|
|
var Environment = plus.android.importClass('android.os.Environment');
|
|
callback(Environment.getExternalStorageDirectory() + "/" + split[1]);
|
|
} else {
|
|
var System = plus.android.importClass('java.lang.System');
|
|
var sdPath = System.getenv("SECONDARY_STORAGE");
|
|
if (sdPath) {
|
|
callback(sdPath + "/" + split[1]);
|
|
}
|
|
}
|
|
} else if ("com.android.providers.downloads.documents" == uri.getAuthority()) {
|
|
var id = DocumentsContract.getDocumentId(uri);
|
|
var ContentUris = plus.android.importClass('android.content.ContentUris');
|
|
var contentUri = ContentUris.withAppendedId(
|
|
// Uri.parse("content://downloads/public_downloads"), Long.valueOf(id));
|
|
Uri.parse("content://downloads/public_downloads"), id);
|
|
callback(getDataColumn(main, contentUri, null, null));
|
|
} else if ("com.android.providers.media.documents" == uri.getAuthority()) {
|
|
var docId = DocumentsContract.getDocumentId(uri);
|
|
var split = docId.split(":");
|
|
console.log(split);
|
|
var type = split[0];
|
|
console.log(type);
|
|
var MediaStore = plus.android.importClass('android.provider.MediaStore');
|
|
if ("image" == type) {
|
|
contentUri = MediaStore.Images.Media.EXTERNAL_CONTENT_URI;
|
|
} else if ("video" == type) {
|
|
contentUri = MediaStore.Video.Media.EXTERNAL_CONTENT_URI;
|
|
} else if ("audio" == type) {
|
|
contentUri = MediaStore.Audio.Media.EXTERNAL_CONTENT_URI;
|
|
} else {
|
|
contentUri = MediaStore.Files.getContentUri("external");
|
|
}
|
|
|
|
console.log(contentUri);
|
|
var selection = "_id=?";
|
|
var selectionArgs = new Array();
|
|
selectionArgs[0] = split[1];
|
|
|
|
callback(getDataColumn(main, contentUri, selection, selectionArgs));
|
|
}
|
|
} else if ("content" == uri.getScheme()) {
|
|
callback(getDataColumn(main, uri, null, null));
|
|
} else if ("file" == uri.getScheme()) {
|
|
callback(uri.getPath());
|
|
}
|
|
}
|
|
}
|
|
main.startActivityForResult(intent, CODE_REQUEST);
|
|
}
|
|
}
|
|
|
|
function getDataColumn(main, uri, selection, selectionArgs) {
|
|
plus.android.importClass(main.getContentResolver());
|
|
let cursor = main.getContentResolver().query(uri, ['_data'], selection, selectionArgs,
|
|
null);
|
|
plus.android.importClass(cursor);
|
|
if (cursor != null && cursor.moveToFirst()) {
|
|
var column_index = cursor.getColumnIndexOrThrow('_data');
|
|
var result = cursor.getString(column_index)
|
|
cursor.close();
|
|
return result;
|
|
}
|
|
return null;
|
|
}
|
|
export default chooseFile |