Skip to content

Commit 339469b

Browse files
committed
把申请摄像头、录音权限放到吊起音视频通话页面时机,去按照申请最小权限的原则去掉申请存储日志的权限。
Change-Id: I81f5e676e958ef2fa1e149abe5ca01edd3f6a659
1 parent 91ab8ac commit 339469b

File tree

5 files changed

+89
-106
lines changed

5 files changed

+89
-106
lines changed

app/src/main/java/com/tencent/iot/explorer/link/kitlink/activity/rtcui/videocall/TRTCVideoCallActivity.java

Lines changed: 89 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,10 @@
11
package com.tencent.iot.explorer.link.kitlink.activity.rtcui.videocall;
22

3+
import android.Manifest;
34
import android.content.Context;
45
import android.content.Intent;
56
import android.content.IntentFilter;
7+
import android.content.pm.PackageManager;
68
import android.os.Bundle;
79
import android.os.Handler;
810
import android.os.HandlerThread;
@@ -16,13 +18,20 @@
1618
import android.widget.TextView;
1719
import android.widget.Toast;
1820

21+
import androidx.annotation.NonNull;
1922
import androidx.annotation.Nullable;
2023
import androidx.appcompat.app.AppCompatActivity;
2124
import androidx.constraintlayout.widget.Group;
25+
import androidx.core.app.ActivityCompat;
2226

2327
//import com.blankj.utilcode.util.ToastUtils;
2428
import com.alibaba.fastjson.JSON;
29+
import com.alibaba.fastjson.JSONObject;
2530
import com.squareup.picasso.Picasso;
31+
import com.tencent.iot.explorer.link.T;
32+
import com.tencent.iot.explorer.link.core.utils.Utils;
33+
import com.tencent.iot.explorer.link.customview.dialog.PermissionDialog;
34+
import com.tencent.iot.explorer.link.kitlink.consts.CommonField;
2635
import com.tencent.iot.explorer.link.rtc.R;
2736
import com.tencent.iot.explorer.link.rtc.model.IntentParams;
2837
import com.tencent.iot.explorer.link.rtc.model.RoomKey;
@@ -103,6 +112,10 @@ public class TRTCVideoCallActivity extends AppCompatActivity implements NetWorkS
103112
private TimerTask enterRoomTask = null;
104113
private NetWorkStateReceiver netWorkStateReceiver;
105114

115+
private PermissionDialog permissionDialog = null;
116+
private boolean requestCameraPermission = false;
117+
private boolean requestRecordAudioPermission = false;
118+
106119
/**
107120
* 拨号的回调
108121
*/
@@ -374,6 +387,78 @@ private void removeIsEnterRoom60secondsTask() {
374387
}
375388
}
376389

390+
@Override
391+
public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {
392+
super.onRequestPermissionsResult(requestCode, permissions, grantResults);
393+
if (requestCode == 102 || requestCode == 103 || requestCode == 104) {
394+
permissionDialog.dismiss();
395+
permissionDialog = null;
396+
if (!requestCameraPermission || !requestRecordAudioPermission) {
397+
checkAndRequestPermission();
398+
} else {
399+
boolean calling = initData();
400+
initListener();
401+
checkoutIsEnterRoom60seconds(calling, getString(R.string.trtccalling_customer_no_resp));
402+
}
403+
}
404+
}
405+
406+
private void checkAndRequestPermission() {
407+
if (ActivityCompat.checkSelfPermission(this, Manifest.permission.CAMERA) == PackageManager.PERMISSION_DENIED && !requestCameraPermission) {
408+
// 查看请求camera权限的时间是否大于48小时
409+
String cameraJsonString = Utils.INSTANCE.getStringValueFromXml(this, CommonField.PERMISSION_CAMERA, CommonField.PERMISSION_CAMERA);
410+
long lasttime = 0L;
411+
if (cameraJsonString != null) {
412+
JSONObject cameraJson = JSON.parseObject(cameraJsonString);
413+
lasttime = cameraJson.getLong(CommonField.PERMISSION_CAMERA);
414+
}
415+
if (cameraJsonString != null && lasttime > 0 && System.currentTimeMillis() / 1000 - lasttime < 48 * 60 * 60) {
416+
T.show(getString(com.tencent.iot.explorer.link.R.string.permission_of_camera_refuse));
417+
return;
418+
}
419+
if (permissionDialog == null) {
420+
permissionDialog = new PermissionDialog(this, com.tencent.iot.explorer.link.R.mipmap.permission_camera ,getString(com.tencent.iot.explorer.link.R.string.permission_camera_lips), getString(com.tencent.iot.explorer.link.R.string.permission_camera_trtc));
421+
permissionDialog.show();
422+
requestCameraPermission = true;
423+
}
424+
ActivityCompat.requestPermissions(this, new String[]{Manifest.permission.CAMERA}, 102);
425+
426+
// 记录请求camera权限的时间
427+
JSONObject json = new JSONObject();
428+
json.put(CommonField.PERMISSION_CAMERA, System.currentTimeMillis() / 1000);
429+
Utils.INSTANCE.setXmlStringValue(this, CommonField.PERMISSION_CAMERA, CommonField.PERMISSION_CAMERA, json.toJSONString());
430+
return;
431+
}
432+
if (ActivityCompat.checkSelfPermission(this, Manifest.permission.RECORD_AUDIO) == PackageManager.PERMISSION_DENIED && !requestRecordAudioPermission) {
433+
// 查看请求mic权限的时间是否大于48小时
434+
String micJsonString = Utils.INSTANCE.getStringValueFromXml(this, CommonField.PERMISSION_MIC, CommonField.PERMISSION_MIC);
435+
long lasttime = 0L;
436+
if (micJsonString != null) {
437+
JSONObject micJson = JSON.parseObject(micJsonString);
438+
lasttime = micJson.getLong(CommonField.PERMISSION_MIC);
439+
}
440+
if (micJsonString != null && lasttime > 0 && System.currentTimeMillis() / 1000 - lasttime < 48 * 60 * 60) {
441+
T.show(getString(com.tencent.iot.explorer.link.R.string.permission_of_camera_mic_refuse));
442+
return;
443+
}
444+
if (permissionDialog == null) {
445+
permissionDialog = new PermissionDialog(this, com.tencent.iot.explorer.link.R.mipmap.permission_mic ,getString(com.tencent.iot.explorer.link.R.string.permission_mic_lips), getString(com.tencent.iot.explorer.link.R.string.permission_camera_trtc));
446+
permissionDialog.show();
447+
requestRecordAudioPermission = true;
448+
}
449+
ActivityCompat.requestPermissions(this, new String[]{Manifest.permission.RECORD_AUDIO}, 103);
450+
451+
// 记录请求mic权限的时间
452+
JSONObject json = new JSONObject();
453+
json.put(CommonField.PERMISSION_MIC, System.currentTimeMillis() / 1000);
454+
Utils.INSTANCE.setXmlStringValue(this, CommonField.PERMISSION_MIC, CommonField.PERMISSION_MIC, json.toJSONString());
455+
return;
456+
}
457+
boolean calling = initData();
458+
initListener();
459+
checkoutIsEnterRoom60seconds(calling, getString(R.string.trtccalling_customer_no_resp));
460+
}
461+
377462
@Override
378463
protected void onCreate(@Nullable Bundle savedInstanceState) {
379464
super.onCreate(savedInstanceState);
@@ -439,9 +524,10 @@ public void userOffline(String deviceId) {
439524
});
440525

441526
initView();
442-
boolean calling = initData();
443-
initListener();
444-
checkoutIsEnterRoom60seconds(calling, getString(R.string.trtccalling_customer_no_resp));
527+
checkAndRequestPermission();
528+
// boolean calling = initData();
529+
// initListener();
530+
// checkoutIsEnterRoom60seconds(calling, getString(R.string.trtccalling_customer_no_resp));
445531
}
446532

447533
@Override

app/src/main/java/com/tencent/iot/explorer/link/kitlink/fragment/HomeFragment.kt

Lines changed: 0 additions & 97 deletions
Original file line numberDiff line numberDiff line change
@@ -74,10 +74,6 @@ class HomeFragment : BaseFragment(), HomeFragmentView, MyCallback, PayloadMessag
7474
private var roomList: ArrayList<RoomEntity> = ArrayList()
7575
private var roomsAdapter: RoomsAdapter? = null
7676
private var handler = Handler()
77-
private var permissionDialog: PermissionDialog? = null
78-
private var requestCameraPermission = false
79-
private var requestStoragePermission = false
80-
private var requestRecordAudioPermission = false
8177
private var deviceListEnd = false
8278
private var shareDeviceListEnd = false
8379

@@ -619,91 +615,13 @@ class HomeFragment : BaseFragment(), HomeFragmentView, MyCallback, PayloadMessag
619615
} else {
620616
layout_no_dev_2_show.visibility = View.GONE
621617
}
622-
requestCameraPermission = false
623-
requestRecordAudioPermission = false
624-
requestStoragePermission = false
625618

626619
if (deviceListEnd) {
627620
this.deviceListEnd = true
628621
}
629622
if (shareDeviceListEnd) {
630623
this.shareDeviceListEnd = true
631624
}
632-
if (this.deviceListEnd && this.shareDeviceListEnd) {
633-
requestPermission()
634-
}
635-
}
636-
637-
private fun requestPermission() {
638-
639-
if ((shareDevList.size > 0 || devList.size > 0) && permissionDialog == null) {
640-
if (!checkPermissions(Manifest.permission.CAMERA) && !requestCameraPermission) {
641-
// 查看请求camera权限的时间是否大于48小时
642-
var cameraJsonString = Utils.getStringValueFromXml(T.getContext(), CommonField.PERMISSION_CAMERA, CommonField.PERMISSION_CAMERA)
643-
var cameraJson: JSONObject? = JSONObject.parse(cameraJsonString) as JSONObject?
644-
val lasttime = cameraJson?.getLong(CommonField.PERMISSION_CAMERA)
645-
if (lasttime != null && lasttime > 0 && System.currentTimeMillis() / 1000 - lasttime < 48*60*60) {
646-
requestCameraPermission = true
647-
T.show(getString(R.string.permission_of_camera_refuse))
648-
return
649-
}
650-
permissionDialog = PermissionDialog(App.activity, R.mipmap.permission_camera ,getString(R.string.permission_camera_lips), getString(R.string.permission_camera_trtc))
651-
permissionDialog!!.show()
652-
requestPermissions(arrayOf(Manifest.permission.CAMERA), 103)
653-
requestCameraPermission = true
654-
655-
// 记录请求camera权限的时间
656-
var json = JSONObject()
657-
json.put(CommonField.PERMISSION_CAMERA, System.currentTimeMillis() / 1000)
658-
Utils.setXmlStringValue(T.getContext(), CommonField.PERMISSION_CAMERA, CommonField.PERMISSION_CAMERA, json.toJSONString())
659-
return
660-
}
661-
requestCameraPermission = true
662-
if (!checkPermissions(Manifest.permission.RECORD_AUDIO) && !requestRecordAudioPermission) {
663-
// 查看请求mic权限的时间是否大于48小时
664-
var micJsonString = Utils.getStringValueFromXml(T.getContext(), CommonField.PERMISSION_MIC, CommonField.PERMISSION_MIC)
665-
var micJson: JSONObject? = JSONObject.parse(micJsonString) as JSONObject?
666-
val lasttime = micJson?.getLong(CommonField.PERMISSION_MIC)
667-
if (lasttime != null && lasttime > 0 && System.currentTimeMillis() / 1000 - lasttime < 48*60*60) {
668-
requestRecordAudioPermission = true
669-
T.show(getString(R.string.permission_of_camera_mic_refuse))
670-
return
671-
}
672-
permissionDialog = PermissionDialog(App.activity, R.mipmap.permission_mic ,getString(R.string.permission_mic_lips), getString(R.string.permission_camera_trtc))
673-
permissionDialog!!.show()
674-
requestPermissions(arrayOf(Manifest.permission.RECORD_AUDIO), 104)
675-
requestRecordAudioPermission = true
676-
677-
// 记录请求mic权限的时间
678-
var json = JSONObject()
679-
json.put(CommonField.PERMISSION_MIC, System.currentTimeMillis() / 1000)
680-
Utils.setXmlStringValue(T.getContext(), CommonField.PERMISSION_MIC, CommonField.PERMISSION_MIC, json.toJSONString())
681-
return
682-
}
683-
requestRecordAudioPermission = true
684-
if ((!checkPermissions(Manifest.permission.WRITE_EXTERNAL_STORAGE) || !checkPermissions(Manifest.permission.READ_EXTERNAL_STORAGE)) && !requestStoragePermission) {
685-
// 查看请求storage权限的时间是否大于48小时
686-
var storageJsonString = Utils.getStringValueFromXml(T.getContext(), CommonField.PERMISSION_STORAGE, CommonField.PERMISSION_STORAGE)
687-
var storageJson: JSONObject? = JSONObject.parse(storageJsonString) as JSONObject?
688-
val lasttime = storageJson?.getLong(CommonField.PERMISSION_STORAGE)
689-
if (lasttime != null && lasttime > 0 && System.currentTimeMillis() / 1000 - lasttime < 48*60*60) {
690-
requestStoragePermission = true
691-
T.show(getString(R.string.permission_of_camera_mic_refuse))
692-
return
693-
}
694-
permissionDialog = PermissionDialog(App.activity, R.mipmap.permission_album ,getString(R.string.permission_storage_lips), getString(R.string.permission_storage))
695-
permissionDialog!!.show()
696-
requestPermissions(arrayOf(Manifest.permission.WRITE_EXTERNAL_STORAGE, Manifest.permission.READ_EXTERNAL_STORAGE), 105)
697-
requestStoragePermission = true
698-
699-
// 记录请求storage权限的时间
700-
var json = JSONObject()
701-
json.put(CommonField.PERMISSION_STORAGE, System.currentTimeMillis() / 1000)
702-
Utils.setXmlStringValue(T.getContext(), CommonField.PERMISSION_STORAGE, CommonField.PERMISSION_STORAGE, json.toJSONString())
703-
return
704-
}
705-
requestStoragePermission = true
706-
}
707625
}
708626

709627
private fun checkPermissions(permission: String): Boolean {
@@ -715,21 +633,6 @@ class HomeFragment : BaseFragment(), HomeFragmentView, MyCallback, PayloadMessag
715633
return true
716634
}
717635

718-
override fun onRequestPermissionsResult(
719-
requestCode: Int,
720-
permissions: Array<String>,
721-
grantResults: IntArray
722-
) {
723-
super.onRequestPermissionsResult(requestCode, permissions, grantResults)
724-
if (permissions.contains(Manifest.permission.CAMERA) || permissions.contains(Manifest.permission.RECORD_AUDIO) || permissions.contains(Manifest.permission.WRITE_EXTERNAL_STORAGE)) {
725-
permissionDialog?.dismiss()
726-
permissionDialog = null
727-
if (!requestCameraPermission || !requestRecordAudioPermission || !requestStoragePermission) {
728-
requestPermission()
729-
}
730-
}
731-
}
732-
733636
override fun showDeviceOnline() {
734637
for (i in 0 until devList.size) {
735638
if (i >= presenter.getIModel(this).deviceList.size) {

app/src/main/res/values-en-rUS/strings.xml

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -720,8 +720,6 @@
720720
<string name="permission_storage_camera_lips">· Storage</string>
721721
<string name="permission_album_avatar">In order to facilitate you to choose a local picture to change your profile picture, Tencent LLink needs to obtain the following permissions:</string>
722722
<string name="permission_album_lips">· Storage (photo album)</string>
723-
<string name="permission_storage">In order to use the real-time voice/video call function of the device and record the operation log, Tencent LLink needs to obtain the following permissions:</string>
724-
<string name="permission_storage_lips">· Storage (log)</string>
725723
<string name="permission_location_ssid">In order to facilitate the automatic acquisition of the WiFi name of the current mobile phone connection when configuring the network for the device, and send the WiFi information to the device to complete the network configuration, Tencent LLink needs to obtain the following permissions:</string>
726724
<string name="permission_location_ssid_map">In order to provide you with precise positioning service, it is convenient to set the home location to obtain weather service, Tencent LLink needs to obtain the following permissions:</string>
727725
<string name="permission_location_ssid_ble">In order to provide you with precise positioning service, it is convenient to search and control Bluetooth devices, Tencent LLink needs to obtain the following permissions:</string>

app/src/main/res/values-zh-rCN/strings.xml

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -720,8 +720,6 @@
720720
<string name="permission_storage_camera_lips">· 存储</string>
721721
<string name="permission_album_avatar">为了便于您可选择本地图片以更换头像,因此腾讯连连需获取以下权限:</string>
722722
<string name="permission_album_lips">· 存储(相册)</string>
723-
<string name="permission_storage">为了使用设备的实时语音/视频通话功能,记录运行日志,因此腾讯连连需获取以下权限:</string>
724-
<string name="permission_storage_lips">· 存储(日志)</string>
725723
<string name="permission_location_ssid">为了便于给设备配网时,自动获取当前手机连接的WiFi名称,向设备发送WiFi信息完成配网,因此腾讯连连需获取以下权限:</string>
726724
<string name="permission_location_ssid_map">为了给您提供精确定位服务,便于设置家庭位置获取天气服务,因此腾讯连连需获取以下权限:</string>
727725
<string name="permission_location_ssid_ble">为了给您提供精确定位服务,便于搜索操控蓝牙设备,因此腾讯连连需获取以下权限:</string>

app/src/main/res/values/strings.xml

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -720,8 +720,6 @@
720720
<string name="permission_storage_camera_lips">· 存储</string>
721721
<string name="permission_album_avatar">为了便于您可选择本地图片以更换头像,因此腾讯连连需获取以下权限:</string>
722722
<string name="permission_album_lips">· 存储(相册)</string>
723-
<string name="permission_storage">为了使用设备的实时语音/视频通话功能,记录运行日志,因此腾讯连连需获取以下权限:</string>
724-
<string name="permission_storage_lips">· 存储(日志)</string>
725723
<string name="permission_location_ssid">为了便于给设备配网时,自动获取当前手机连接的WiFi名称,向设备发送WiFi信息完成配网,因此腾讯连连需获取以下权限:</string>
726724
<string name="permission_location_ssid_map">为了给您提供精确定位服务,便于设置家庭位置获取天气服务,因此腾讯连连需获取以下权限:</string>
727725
<string name="permission_location_ssid_ble">为了给您提供精确定位服务,便于搜索操控蓝牙设备,因此腾讯连连需获取以下权限:</string>

0 commit comments

Comments
 (0)