当前位置:   article > 正文

uniapp android 调用原生 文件管理_plus.android.runtimemainactivity

plus.android.runtimemainactivity

项目背景uniapp 项目三端部署,项目中有一个 上传文件的功能,需要调用原生的 文件管理器,本来是用原生插件 但是最终拿不到,原生文件管理acticity 的  返回:

onActivityResult(int requestCode, int resultCode, Intent intent)

就是 上面这句话  不会调用:最后看到论坛上面写道:可以在  js 中访问文件管理器,并且接收到 返回:

在 js 中设置:main.onActivityResult

var main = plus.android.runtimeMainActivity();  

main.onActivityResult = function(requestCode, resultCode, data) {

具体的使用:

  1. pickFile.PickFile((path) => {
  2. //返回的路径
  3. this.$emit('result', 'file:///' + path)
  4. }, '*/*')

核心工具脚本: pickFile.js

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

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/小蓝xlanll/article/detail/267440
推荐阅读
相关标签
  

闽ICP备14008679号