场景

image.png

安卓手机在进行图片上传时如果手机没有授权”存储”权限会出现上传失败提示。

参考链接

https://ask.dcloud.net.cn/article/35091
https://www.html5plus.org/doc/zh_cn/android.html#plus.android.requestPermissions

  1. /*
  2. 正常权限,无需动态申请:
  3. ACCESS_LOCATION_EXTRA_COMMANDS
  4. ACCESS_NETWORK_STATE
  5. ACCESS_NOTIFICATION_POLICY
  6. ACCESS_WIFI_STATE
  7. BLUETOOTH
  8. BLUETOOTH_ADMIN
  9. BROADCAST_STICKY
  10. CHANGE_NETWORK_STATE
  11. CHANGE_WIFI_MULTICAST_STATE
  12. CHANGE_WIFI_STATE
  13. DISABLE_KEYGUARD
  14. EXPAND_STATUS_BAR
  15. GET_PACKAGE_SIZE
  16. INSTALL_SHORTCUT
  17. INTERNET
  18. KILL_BACKGROUND_PROCESSES
  19. MODIFY_AUDIO_SETTINGS
  20. NFC
  21. READ_SYNC_SETTINGS
  22. READ_SYNC_STATS
  23. RECEIVE_BOOT_COMPLETED
  24. REORDER_TASKS
  25. REQUEST_INSTALL_PACKAGES
  26. SET_ALARM
  27. SET_TIME_ZONE
  28. SET_WALLPAPER
  29. SET_WALLPAPER_HINTS
  30. TRANSMIT_IR
  31. UNINSTALL_SHORTCUT
  32. USE_FINGERPRINT
  33. VIBRATE
  34. WAKE_LOCK
  35. WRITE_SYNC_SETTINGS
  36. 2)危险权限,需要动态申请:
  37. group:android.permission-group.STORAGE
  38. READ_EXTERNAL_STORAGE
  39. WRITE_EXTERNAL_STORAGE
  40. group:android.permission-group.CONTACTS
  41. WRITE_CONTACTS
  42. GET_ACCOUNTS
  43. READ_CONTACTS
  44. group:android.permission-group.PHONE
  45. READ_CALL_LOG
  46. READ_PHONE_STATE
  47. CALL_PHONE
  48. WRITE_CALL_LOG
  49. USE_SIP
  50. PROCESS_OUTGOING_CALLS
  51. com.android.voicemail.permission.ADD_VOICEMAIL
  52. group:android.permission-group.CALENDAR
  53. READ_CALENDAR
  54. WRITE_CALENDAR
  55. group:android.permission-group.CAMERA
  56. CAMERA
  57. group:android.permissiongroup.SENSORS
  58. BODY_SENSORS
  59. group:android.permission-group.LOCATION
  60. ACCESS_FINE_LOCATION
  61. ACCESS_COARSE_LOCATION
  62. group:android.permission-group.MICROPHONE
  63. RECORD_AUDIO
  64. group:android.permission-group.SMS
  65. READ_SMS
  66. RECEIVE_WAP_PUSH
  67. RECEIVE_MMS
  68. RECEIVE_SMS
  69. SEND_SMS
  70. READ_CELL_BROADCASTS
  71. */
  72. /**
  73. * Me:
  74. * cnscn <214363570@qq.com>
  75. *
  76. * 参考:
  77. * https://blog.csdn.net/lvyoujt/article/details/52826556
  78. * https://developer.android.com/reference/android/Manifest.permission
  79. * https://developer.android.com/reference/android/os/Build.VERSION
  80. */
  81. // 进行平台条件编译,否则在iOS端会出现实例对象找不到的报错情况
  82. const platform = uni.getSystemInfoSync().platform == 'android'
  83. const Build = platform ? plus.android.importClass('android.os.Build'):''
  84. const Manifest = platform ? plus.android.importClass('android.Manifest'):""
  85. const MainActivity = platform ? plus.android.runtimeMainActivity():""
  86. export const ArrPermissions = platform ? [
  87. Manifest.permission.READ_EXTERNAL_STORAGE,
  88. Manifest.permission.WRITE_EXTERNAL_STORAGE,
  89. Manifest.permission.CAMERA,
  90. ] : []
  91. export function PermissionCheck(permission) {
  92. if (Build.VERSION.SDK_INT >= 23) {
  93. if (MainActivity.checkSelfPermission(permission) == -1) {
  94. return false
  95. }
  96. }
  97. return true
  98. }
  99. export function PermissionChecks(Arr) {
  100. var HasPermission = true
  101. for (var index in Arr) {
  102. var permission = Arr[index]
  103. //如果此处没有权限,则是用户拒绝了
  104. if (!PermissionCheck(permission)) {
  105. HasPermission = false
  106. break
  107. }
  108. }
  109. return HasPermission
  110. }
  111. // 实测 ainActivity.requestPermissions(Arr, REQUEST_CODE_CONTACT)申请权限无法调起
  112. // 使用plus.andriod 方法进行替换
  113. export function PermissionRequest(Arr) {
  114. var REQUEST_CODE_CONTACT = 101
  115. if (Build.VERSION.SDK_INT >= 23) {
  116. // MainActivity.requestPermissions(Arr, REQUEST_CODE_CONTACT)
  117. plus.android.requestPermissions(Arr, function (e) {
  118. }, function (e) {
  119. });
  120. }
  121. }
  122. //如果没有权限,则申请
  123. // if (!PermissionChecks(ArrPermissions)) {
  124. // PermissionRequest(ArrPermissions);
  125. // } else { //如果拥有权限,那么干点啥吧^_^
  126. // //.......
  127. // }

进行权限申请以及图片上传

  1. /* #ifdef MP-WEIXIN */
  2. this.chooseImage();
  3. /* #endif */
  4. /* #ifdef APP-PLUS || H5*/
  5. if (window.plus && plus.os.name == "Android") {
  6. if (!PermissionChecks(ArrPermissions)) {
  7. PermissionRequest(ArrPermissions);
  8. } else {
  9. this.chooseImage();
  10. }
  11. } else {
  12. this.chooseImage();
  13. }
  14. /* #endif */