chooseFile.js 4.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123
  1. function chooseFile(callback, acceptType) {
  2. //acceptType为你要查的文件类型"image/*","audio/*","video/*;image/*"
  3. // intent.setType("image/*");
  4. //intent.setType("audio/*");
  5. //选择音频
  6. //intent.setType("video/*;image/*");
  7. //选择视频 (mp4 3gp 是android支持的视频格式)
  8. var CODE_REQUEST = 1000;
  9. var main = plus.android.runtimeMainActivity();
  10. if (plus.os.name == "Android") {
  11. var Intent = plus.android.importClass("android.content.Intent");
  12. var intent = new Intent(Intent.ACTION_GET_CONTENT);
  13. intent.addCategory(Intent.CATEGORY_OPENABLE);
  14. if (acceptType) {
  15. intent.setType(acceptType);
  16. } else {
  17. intent.setType("*/*");
  18. }
  19. main.onActivityResult = function (requestCode, resultCode, data) {
  20. if (requestCode == CODE_REQUEST) {
  21. var uri = data.getData();
  22. plus.android.importClass(uri);
  23. var Build = plus.android.importClass("android.os.Build");
  24. var isKitKat = Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT;
  25. var DocumentsContract = plus.android.importClass(
  26. "android.provider.DocumentsContract",
  27. );
  28. // DocumentProvider
  29. if (isKitKat && DocumentsContract.isDocumentUri(main, uri)) {
  30. // console.log("版本大于 4.4 ");
  31. // ExternalStorageProvider
  32. if ("com.android.externalstorage.documents" == uri.getAuthority()) {
  33. var docId = DocumentsContract.getDocumentId(uri);
  34. var split = docId.split(":");
  35. var type = split[0];
  36. if ("primary" == type) {
  37. var Environment = plus.android.importClass(
  38. "android.os.Environment",
  39. );
  40. callback(
  41. Environment.getExternalStorageDirectory() + "/" + split[1],
  42. );
  43. } else {
  44. var System = plus.android.importClass("java.lang.System");
  45. var sdPath = System.getenv("SECONDARY_STORAGE");
  46. if (sdPath) {
  47. callback(sdPath + "/" + split[1]);
  48. }
  49. }
  50. }
  51. // DownloadsProvider
  52. else if (
  53. "com.android.providers.downloads.documents" == uri.getAuthority()
  54. ) {
  55. var id = DocumentsContract.getDocumentId(uri);
  56. var ContentUris = plus.android.importClass(
  57. "android.content.ContentUris",
  58. );
  59. var contentUri = ContentUris.withAppendedId(
  60. // Uri.parse("content://downloads/public_downloads"), Long.valueOf(id));
  61. Uri.parse("content://downloads/public_downloads"),
  62. id,
  63. );
  64. callback(getDataColumn(main, contentUri, null, null));
  65. }
  66. // MediaProvider
  67. else if (
  68. "com.android.providers.media.documents" == uri.getAuthority()
  69. ) {
  70. var docId = DocumentsContract.getDocumentId(uri);
  71. var split = docId.split(":");
  72. var type = split[0];
  73. var MediaStore = plus.android.importClass(
  74. "android.provider.MediaStore",
  75. );
  76. if ("image" == type) {
  77. contentUri = MediaStore.Images.Media.EXTERNAL_CONTENT_URI;
  78. } else if ("video" == type) {
  79. contentUri = MediaStore.Video.Media.EXTERNAL_CONTENT_URI;
  80. } else if ("audio" == type) {
  81. contentUri = MediaStore.Audio.Media.EXTERNAL_CONTENT_URI;
  82. }
  83. var selection = "_id=?";
  84. var selectionArgs = new Array();
  85. selectionArgs[0] = split[1];
  86. callback(getDataColumn(main, contentUri, selection, selectionArgs));
  87. }
  88. }
  89. // MediaStore (and general)
  90. else if ("content" == uri.getScheme()) {
  91. callback(getDataColumn(main, uri, null, null));
  92. }
  93. // File
  94. else if ("file" == uri.getScheme()) {
  95. callback(uri.getPath());
  96. }
  97. }
  98. };
  99. main.startActivityForResult(intent, CODE_REQUEST);
  100. }
  101. }
  102. function getDataColumn(main, uri, selection, selectionArgs) {
  103. plus.android.importClass(main.getContentResolver());
  104. let cursor = main
  105. .getContentResolver()
  106. .query(uri, ["_data"], selection, selectionArgs, null);
  107. plus.android.importClass(cursor);
  108. if (cursor != null && cursor.moveToFirst()) {
  109. var column_index = cursor.getColumnIndexOrThrow("_data");
  110. var result = cursor.getString(column_index);
  111. cursor.close();
  112. return result;
  113. }
  114. return null;
  115. }
  116. export default chooseFile;