diff --git a/app/src/main/java/com/nnbc123/app/common/permission/PermissionHelper.kt b/app/src/main/java/com/nnbc123/app/common/permission/PermissionHelper.kt index 86b4cf58c..159e55593 100644 --- a/app/src/main/java/com/nnbc123/app/common/permission/PermissionHelper.kt +++ b/app/src/main/java/com/nnbc123/app/common/permission/PermissionHelper.kt @@ -1,5 +1,8 @@ package com.nnbc123.app.common.permission +import android.content.Context +import android.content.pm.PackageManager +import androidx.core.content.ContextCompat import com.tbruyelle.rxpermissions2.RxPermissions /** @@ -8,19 +11,28 @@ import com.tbruyelle.rxpermissions2.RxPermissions **/ object PermissionHelper { + fun isGranted(context: Context, permission: String): Boolean { + return ContextCompat.checkSelfPermission( + context, + permission + ) == PackageManager.PERMISSION_GRANTED + } + /** * 检查权限是否都授权 */ - fun isAllGender(rxPermissions: RxPermissions, vararg perms: String?): Boolean { - if (perms.firstOrNull { - if (it == null) { - false - } else { - !rxPermissions.isGranted(it) - } - } != null) { - return false - } - return true + fun isAllGranted(context: Context, vararg permissions: String): Boolean { + return permissions.firstOrNull { + !isGranted(context, it) + } == null + } + + /** + * 检查权限是否都授权 + */ + fun isAllGranted(rxPermissions: RxPermissions, vararg perms: String): Boolean { + return perms.firstOrNull { + !rxPermissions.isGranted(it) + } == null } } \ No newline at end of file diff --git a/app/src/main/java/com/nnbc123/app/qiyukefu/RequestPermissionEvent.kt b/app/src/main/java/com/nnbc123/app/qiyukefu/RequestPermissionEvent.kt index 7ecfcd125..fb268c0ec 100644 --- a/app/src/main/java/com/nnbc123/app/qiyukefu/RequestPermissionEvent.kt +++ b/app/src/main/java/com/nnbc123/app/qiyukefu/RequestPermissionEvent.kt @@ -36,7 +36,7 @@ class RequestPermissionEvent : UnicornEventBase { && perms != null ) { val rxPermissions = RxPermissions(activity) - if (PermissionHelper.isAllGender(rxPermissions, * perms)) { + if (PermissionHelper.isAllGranted(rxPermissions, * perms)) { p2?.onNotPorcessEvent() } else { RequestPermissionPromptDialog(p1, tips).show() @@ -81,14 +81,23 @@ class RequestPermissionEvent : UnicornEventBase { return ResUtil.getString(R.string.permission_denied_tips_mic) } + RequestPermissionEventEntry.SCENES_TAKE_VIDEO -> { + return StringBuffer().append("1.") + .append(ResUtil.getString(R.string.permission_denied_tips_camera)) + .append("\n2.").append(ResUtil.getString(R.string.permission_denied_tips_mic)) + .toString() + } + + RequestPermissionEventEntry.SCENES_TAKE_PHOTO -> { + return ResUtil.getString(R.string.permission_denied_tips_camera) + } + RequestPermissionEventEntry.SCENES_SELECT_MEDIA, - RequestPermissionEventEntry.SCENES_TAKE_VIDEO, RequestPermissionEventEntry.SCENES_SAVE_IMAGE, RequestPermissionEventEntry.SCENES_SAVE_VIDEO, RequestPermissionEventEntry.SCENES_SELECT_VIDEO, RequestPermissionEventEntry.SCENES_SELECT_FILE, RequestPermissionEventEntry.SCENES_SELECT_IMAGE, - RequestPermissionEventEntry.SCENES_TAKE_PHOTO, RequestPermissionEventEntry.SCENES_VIDEO_CHAT -> { return ResUtil.getString(R.string.permission_denied_tips_image) } diff --git a/app/src/main/java/com/nnbc123/app/skill/activity/AddSkillActivity.kt b/app/src/main/java/com/nnbc123/app/skill/activity/AddSkillActivity.kt index 20753d815..4b62902ac 100644 --- a/app/src/main/java/com/nnbc123/app/skill/activity/AddSkillActivity.kt +++ b/app/src/main/java/com/nnbc123/app/skill/activity/AddSkillActivity.kt @@ -8,12 +8,15 @@ import android.view.View import com.netease.nim.uikit.StatusBarUtil import com.nnbc123.app.R import com.nnbc123.app.base.BaseBindingActivity +import com.nnbc123.app.common.permission.PermissionHelper import com.nnbc123.app.databinding.ActivitySkillEditBinding -import com.nnbc123.core.skill.entity.SkillPropertyEntity import com.nnbc123.app.skill.repository.SkillDataManager import com.nnbc123.app.skill.repository.SkillModel import com.nnbc123.app.skill.widget.CARD_TYPE_AUDIO +import com.nnbc123.app.ui.widget.dialog.RequestPermissionPromptDialog +import com.nnbc123.core.skill.entity.SkillPropertyEntity import com.nnbc123.library.annatation.ActLayoutRes +import com.nnbc123.library.utils.ResUtil @ActLayoutRes(R.layout.activity_skill_edit) class AddSkillActivity : BaseBindingActivity() { @@ -79,11 +82,24 @@ class AddSkillActivity : BaseBindingActivity() { @SuppressLint("CheckResult") private fun checkPermissionAndDeal(it: SkillPropertyEntity) { - checkPermission( + val tips = StringBuffer().append("1.") + .append(ResUtil.getString(R.string.permission_denied_tips_mic)) + .append("\n2.").append(ResUtil.getString(R.string.permission_denied_tips_image)) + .toString() + val params = arrayOf( Manifest.permission.RECORD_AUDIO, Manifest.permission.WRITE_EXTERNAL_STORAGE ) + if (RequestPermissionPromptDialog.isNeedPrompt() && !PermissionHelper.isAllGranted( + rxPermissions, + *params + ) + ) { + RequestPermissionPromptDialog(this, tips).show() + } + checkPermission(*params) .subscribe { aBoolean: Boolean -> + RequestPermissionPromptDialog.dismissCurrentDialog() if (aBoolean) { setSkillViewData(it) } else { diff --git a/app/src/main/java/com/nnbc123/app/ui/im/fragment/MessageFragment.java b/app/src/main/java/com/nnbc123/app/ui/im/fragment/MessageFragment.java index 718970703..d85a0309e 100644 --- a/app/src/main/java/com/nnbc123/app/ui/im/fragment/MessageFragment.java +++ b/app/src/main/java/com/nnbc123/app/ui/im/fragment/MessageFragment.java @@ -328,7 +328,7 @@ public class MessageFragment extends TFragment implements ModuleProxy, MessageLi private void requestPermission(Consumer consumer, String tips, String... perms) { Context context = getContext(); if (context != null && RequestPermissionPromptDialog.Companion.isNeedPrompt() - && !PermissionHelper.INSTANCE.isAllGender(rxPermissions, perms)) { + && !PermissionHelper.INSTANCE.isAllGranted(rxPermissions, perms)) { new RequestPermissionPromptDialog(context, tips).show(); } Disposable disposable = rxPermissions.request(perms).subscribe(aBoolean -> { @@ -630,7 +630,7 @@ public class MessageFragment extends TFragment implements ModuleProxy, MessageLi Manifest.permission.RECORD_AUDIO}; String tips = ResUtil.getString(R.string.permission_denied_tips_mic); if (RequestPermissionPromptDialog.Companion.isNeedPrompt() - && !PermissionHelper.INSTANCE.isAllGender(rxPermissions, perms)) { + && !PermissionHelper.INSTANCE.isAllGranted(rxPermissions, perms)) { new RequestPermissionPromptDialog(requireContext(), tips).show(); } checkPermission(perms) diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index 32b36cce0..e0170e781 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -991,6 +991,7 @@ %d钻/局 为了实现连麦及语音输入等功能,请您允许应用向您获取“麦克风”权限 访问你的本地内容,以能正常使用图片上传、视频发送等应用功能 + 用于拍摄更新个人头像、发布动态、与客服反馈问题时进行照片和视频的拍摄录制 上次登录 Line登录 Google登录 diff --git a/app/src/module_community/java/com/nnbc123/app/community/publish/view/PublishActivity.java b/app/src/module_community/java/com/nnbc123/app/community/publish/view/PublishActivity.java index d0fd2c20a..a601a95e8 100644 --- a/app/src/module_community/java/com/nnbc123/app/community/publish/view/PublishActivity.java +++ b/app/src/module_community/java/com/nnbc123/app/community/publish/view/PublishActivity.java @@ -202,7 +202,7 @@ public class PublishActivity extends BaseMvpActivity= 33 ? Manifest.permission.READ_MEDIA_IMAGES : Manifest.permission.READ_EXTERNAL_STORAGE; if (RequestPermissionPromptDialog.Companion.isNeedPrompt() - && !PermissionHelper.INSTANCE.isAllGender(rxPermissions, permission)) { + && !PermissionHelper.INSTANCE.isAllGranted(rxPermissions, permission)) { new RequestPermissionPromptDialog(this, tips).show(); } checkPermission((aBoolean) -> { diff --git a/app/src/module_music/java/com/nnbc123/app/music/activity/MusicListActivity.java b/app/src/module_music/java/com/nnbc123/app/music/activity/MusicListActivity.java index b972614ac..5ed8a43d5 100644 --- a/app/src/module_music/java/com/nnbc123/app/music/activity/MusicListActivity.java +++ b/app/src/module_music/java/com/nnbc123/app/music/activity/MusicListActivity.java @@ -5,11 +5,13 @@ import android.annotation.SuppressLint; import android.content.Context; import android.content.Intent; import android.os.Build; +import android.net.Uri; import android.os.Bundle; import androidx.fragment.app.Fragment; import androidx.viewpager.widget.ViewPager; +import android.provider.Settings; import android.view.View; import android.widget.ImageView; @@ -17,10 +19,13 @@ import com.flyco.tablayout.SlidingTabLayout; import com.netease.nim.uikit.StatusBarUtil; import com.nnbc123.app.R; import com.nnbc123.app.base.BaseMvpActivity; +import com.nnbc123.app.common.permission.PermissionHelper; import com.nnbc123.app.public_chat_hall.adapter.PagerDataAdapter; import com.nnbc123.app.music.fragment.LocalMusicListFragment; import com.nnbc123.app.music.fragment.ShareMusicListFragment; import com.nnbc123.app.music.presenter.MusicListPresenter; +import com.nnbc123.app.ui.widget.dialog.CommonTipDialog; +import com.nnbc123.app.ui.widget.dialog.RequestPermissionPromptDialog; import com.nnbc123.core.auth.event.KickOutEvent; import com.nnbc123.core.music.db.bean.LocalMusicBean; import com.nnbc123.core.statistic.StatisticManager; @@ -28,6 +33,7 @@ import com.nnbc123.core.statistic.protocol.StatisticsProtocol; import com.nnbc123.library.base.factory.CreatePresenter; import com.nnbc123.core.music.event.JumpToShareMusicListFragmentEvent; import com.nnbc123.core.music.view.IMusicListView; +import com.nnbc123.library.utils.ResUtil; import org.greenrobot.eventbus.EventBus; import org.greenrobot.eventbus.Subscribe; @@ -96,15 +102,46 @@ public class MusicListActivity extends BaseMvpActivity= 33 ? Manifest.permission.READ_MEDIA_AUDIO : Manifest.permission.READ_EXTERNAL_STORAGE) + String tips = ResUtil.getString(R.string.permission_denied_tips_image); + String params = Build.VERSION.SDK_INT >= 33 ? Manifest.permission.READ_MEDIA_AUDIO : Manifest.permission.READ_EXTERNAL_STORAGE; + if (RequestPermissionPromptDialog.Companion.isNeedPrompt() && !PermissionHelper.INSTANCE.isAllGranted( + rxPermissions, params) + ) { + new RequestPermissionPromptDialog(this, tips).show(); + } + checkPermission(params) .compose(bindToLifecycle()) .subscribe(aBoolean -> { + RequestPermissionPromptDialog.Companion.dismissCurrentDialog(); if (!aBoolean) { - toast("请给予应用存储权限,以正常播放音乐。"); + showPermissionDeniedDialog(tips); } }); } + private void showPermissionDeniedDialog(String tips) { + CommonTipDialog mPrivacyDialog = new CommonTipDialog(context); + mPrivacyDialog.setTipMsg(tips); + mPrivacyDialog.setOkText("去设置"); + mPrivacyDialog.setOnActionListener( + new CommonTipDialog.OnActionListener() { + @Override + public void onOk() { + //同意跳到应用详情页面 + Uri packageUri = Uri.parse("package:" + getPackageName()); + Intent intent = new Intent( + Settings.ACTION_APPLICATION_DETAILS_SETTINGS, + packageUri + ); + startActivityForResult( + intent, 0 + ); + } + } + ); + mPrivacyDialog.show(); + } + @Override protected void onDestroy() { super.onDestroy();