@@ -26,6 +26,7 @@ import com.tencent.iot.explorer.link.core.log.L
2626import com.tencent.iot.explorer.link.core.utils.FileUtils
2727import com.tencent.iot.explorer.link.core.utils.PhotoUtils
2828import com.tencent.iot.explorer.link.core.utils.Utils
29+ import com.tencent.iot.explorer.link.customview.dialog.PermissionDialog
2930import com.tencent.iot.explorer.link.kitlink.consts.CommonField
3031import com.tencent.iot.explorer.link.kitlink.util.HttpRequest
3132import com.tencent.iot.explorer.link.kitlink.webview.BridgeImpl
@@ -47,8 +48,15 @@ class HelpWebViewActivity: BaseActivity(), MyCallback, View.OnClickListener {
4748 private var uploadMessageAboveL: ValueCallback <Array <Uri >>? = null
4849 private val FILE_CHOOSER_RESULT_CODE = 10000
4950 private val FILE_CAMERA_RESULT_CODE = 9999
51+ private val FILE_CHOOSER_CAMERA_RESULT_CODE = 9998
5052
5153 private var configQuestionList = false
54+ private var permissionDialog: PermissionDialog ? = null
55+
56+ private var permissions = arrayOf(
57+ Manifest .permission.READ_EXTERNAL_STORAGE ,
58+ Manifest .permission.WRITE_EXTERNAL_STORAGE
59+ )
5260
5361 override fun getContentView (): Int {
5462 return R .layout.activity_help_feedback
@@ -204,23 +212,27 @@ class HelpWebViewActivity: BaseActivity(), MyCallback, View.OnClickListener {
204212 }
205213
206214 // 检查相机权限是否开启
207- private fun checkCameraPermission (): Boolean {
208-
209- // android M(6.0) 以上检查存储权限以及相机权限
210- if (Build .VERSION .SDK_INT >= Build .VERSION_CODES .M &&
211- (ContextCompat .checkSelfPermission(this @HelpWebViewActivity,
212- Manifest .permission.CAMERA ) != PackageManager .PERMISSION_GRANTED ||
213- ContextCompat .checkSelfPermission(this @HelpWebViewActivity,
214- Manifest .permission.WRITE_EXTERNAL_STORAGE ) != PackageManager .PERMISSION_GRANTED )) {
215-
216- requestPermissions(arrayOf(Manifest .permission.CAMERA ,
217- Manifest .permission.WRITE_SETTINGS ,
218- Manifest .permission.READ_EXTERNAL_STORAGE ,
219- Manifest .permission.WRITE_EXTERNAL_STORAGE ),
220- FILE_CHOOSER_RESULT_CODE )
221- return false
215+ private fun checkCameraPermission (isCamera : Boolean ): Boolean {
216+
217+ if (isCamera) {// 相机
218+ // android M(6.0) 以上检查存储权限以及相机权限
219+ if (Build .VERSION .SDK_INT >= Build .VERSION_CODES .M &&
220+ (ContextCompat .checkSelfPermission(this @HelpWebViewActivity,
221+ Manifest .permission.CAMERA ) != PackageManager .PERMISSION_GRANTED ||
222+ ContextCompat .checkSelfPermission(this @HelpWebViewActivity,
223+ Manifest .permission.WRITE_EXTERNAL_STORAGE ) != PackageManager .PERMISSION_GRANTED )) {
224+
225+ return false
226+ }
227+ return true
228+ } else {// 相册
229+ // android M(6.0) 以上检查存储权限
230+ if (Build .VERSION .SDK_INT >= Build .VERSION_CODES .M && ContextCompat .checkSelfPermission(this @HelpWebViewActivity, Manifest .permission.WRITE_EXTERNAL_STORAGE ) != PackageManager .PERMISSION_GRANTED ) {
231+
232+ return false
233+ }
234+ return true
222235 }
223- return true
224236 }
225237
226238 override fun onClick (v : View ? ) {
@@ -235,6 +247,48 @@ class HelpWebViewActivity: BaseActivity(), MyCallback, View.OnClickListener {
235247 }
236248 }
237249
250+ override fun onRequestPermissionsResult (
251+ requestCode : Int ,
252+ permissions : Array <String >,
253+ grantResults : IntArray
254+ ) {
255+ super .onRequestPermissionsResult(requestCode, permissions, grantResults)
256+ permissionDialog?.dismiss()
257+ permissionDialog = null
258+ for (i in permissions.indices) {
259+ if (grantResults[i] == PackageManager .PERMISSION_DENIED ) {
260+ when (requestCode) {
261+ FILE_CHOOSER_RESULT_CODE -> {
262+ T .show(resources.getString(R .string.permission_of_album_refuse))
263+ }
264+ FILE_CAMERA_RESULT_CODE -> {
265+ T .show(resources.getString(R .string.permission_of_camera_refuse))
266+ }
267+ FILE_CHOOSER_CAMERA_RESULT_CODE -> {
268+ T .show(resources.getString(R .string.permission_of_camera_refuse))
269+ }
270+ }
271+ return
272+ }
273+ }
274+ }
275+
276+ // 查看请求 permissionName 权限的时间是否大于48小时
277+ private fun requestPermissionIsIn48Hours (permissionName : String ) :Boolean {
278+ // 查看请求camera权限的时间是否大于48小时
279+ var cameraJsonString = Utils .getStringValueFromXml(T .getContext(), permissionName, permissionName)
280+ var cameraJson: JSONObject ? = JSONObject .parse(cameraJsonString) as JSONObject ?
281+ val lasttime = cameraJson?.getLong(permissionName)
282+ return (lasttime != null && lasttime > 0 && System .currentTimeMillis() / 1000 - lasttime < 48 * 60 * 60 )
283+ }
284+ // 记录请求 permissionName 权限的时间
285+ private fun savePermission (permissionName : String ) {
286+ //
287+ var json = JSONObject ()
288+ json.put(permissionName, System .currentTimeMillis() / 1000 )
289+ Utils .setXmlStringValue(T .getContext(), permissionName, permissionName, json.toJSONString())
290+ }
291+
238292 val webChromeClient = object : WebChromeClient () {
239293
240294 override fun onShowFileChooser (webView : WebView , filePathCallback : ValueCallback <Array <Uri >>, fileChooserParams : FileChooserParams ? ): Boolean {
@@ -244,17 +298,63 @@ class HelpWebViewActivity: BaseActivity(), MyCallback, View.OnClickListener {
244298
245299 if (fileChooserParams.isCaptureEnabled) {
246300 isCapture = true ;
247- if (checkCameraPermission()) {
301+ if (checkCameraPermission(true )) {
248302 PhotoUtils .startCamera(this @HelpWebViewActivity)
249303 } else {
304+
305+ // 检查相机权限
306+ if (ContextCompat .checkSelfPermission(this @HelpWebViewActivity, Manifest .permission.CAMERA ) != PackageManager .PERMISSION_GRANTED ) {
307+ // 查看请求camera权限的时间是否大于48小时
308+ if (requestPermissionIsIn48Hours(CommonField .PERMISSION_CAMERA )) {
309+ T .show(resources.getString(R .string.permission_of_camera_refuse))
310+ return false
311+ }
312+ if (Build .VERSION .SDK_INT >= Build .VERSION_CODES .M ) {
313+ requestPermissions(arrayOf(Manifest .permission.CAMERA ), FILE_CAMERA_RESULT_CODE )
314+ }
315+ permissionDialog = PermissionDialog (this @HelpWebViewActivity, R .mipmap.permission_camera ,getString(R .string.permission_camera_lips), getString(R .string.permission_camera_help_center))
316+ permissionDialog!! .show()
317+
318+ // 记录请求camera权限的时间
319+ savePermission(CommonField .PERMISSION_CAMERA )
320+ } else if (ContextCompat .checkSelfPermission(this @HelpWebViewActivity, Manifest .permission.WRITE_EXTERNAL_STORAGE ) != PackageManager .PERMISSION_GRANTED ) {
321+ // 查看请求album权限的时间是否大于48小时
322+ if (requestPermissionIsIn48Hours(CommonField .PERMISSION_ALBUM )) {
323+ T .show(resources.getString(R .string.permission_of_album_refuse))
324+ return false
325+ }
326+ if (Build .VERSION .SDK_INT >= Build .VERSION_CODES .M ) {
327+ requestPermissions(permissions, FILE_CHOOSER_CAMERA_RESULT_CODE )
328+ }
329+ permissionDialog = PermissionDialog (this @HelpWebViewActivity, R .mipmap.permission_album ,getString(R .string.permission_storage_camera_lips), getString(R .string.permission_storage_help_center_camera))
330+ permissionDialog!! .show()
331+
332+ // 记录请求album权限的时间
333+ savePermission(CommonField .PERMISSION_ALBUM )
334+ }
335+
336+
250337 return false
251338 }
252339
253340 } else {
254341 isCapture = false ;
255- if (checkCameraPermission()) {
342+ if (checkCameraPermission(false )) {
256343 PhotoUtils .startAlbum(this @HelpWebViewActivity)
257344 } else {
345+ // 查看请求album权限的时间是否大于48小时
346+ if (requestPermissionIsIn48Hours(CommonField .PERMISSION_ALBUM )) {
347+ T .show(resources.getString(R .string.permission_of_album_refuse))
348+ return false
349+ }
350+ if (Build .VERSION .SDK_INT >= Build .VERSION_CODES .M ) {
351+ requestPermissions(permissions, FILE_CHOOSER_RESULT_CODE )
352+ }
353+ permissionDialog = PermissionDialog (this @HelpWebViewActivity, R .mipmap.permission_album ,getString(R .string.permission_album_lips), getString(R .string.permission_storage_help_center))
354+ permissionDialog!! .show()
355+
356+ // 记录请求album权限的时间
357+ savePermission(CommonField .PERMISSION_ALBUM )
258358 return false
259359 }
260360 }
0 commit comments