feat:针对华为市场审核 补充权限申请提示

This commit is contained in:
Max
2024-01-15 11:58:22 +08:00
parent 3ac10340d6
commit e478c9c202
7 changed files with 104 additions and 25 deletions

View File

@@ -1,5 +1,8 @@
package com.nnbc123.app.common.permission 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 import com.tbruyelle.rxpermissions2.RxPermissions
/** /**
@@ -8,19 +11,28 @@ import com.tbruyelle.rxpermissions2.RxPermissions
**/ **/
object PermissionHelper { 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 { fun isAllGranted(context: Context, vararg permissions: String): Boolean {
if (perms.firstOrNull { return permissions.firstOrNull {
if (it == null) { !isGranted(context, it)
false } == null
} else { }
!rxPermissions.isGranted(it)
} /**
} != null) { * 检查权限是否都授权
return false */
} fun isAllGranted(rxPermissions: RxPermissions, vararg perms: String): Boolean {
return true return perms.firstOrNull {
!rxPermissions.isGranted(it)
} == null
} }
} }

View File

@@ -36,7 +36,7 @@ class RequestPermissionEvent : UnicornEventBase<RequestPermissionEventEntry> {
&& perms != null && perms != null
) { ) {
val rxPermissions = RxPermissions(activity) val rxPermissions = RxPermissions(activity)
if (PermissionHelper.isAllGender(rxPermissions, * perms)) { if (PermissionHelper.isAllGranted(rxPermissions, * perms)) {
p2?.onNotPorcessEvent() p2?.onNotPorcessEvent()
} else { } else {
RequestPermissionPromptDialog(p1, tips).show() RequestPermissionPromptDialog(p1, tips).show()
@@ -81,14 +81,23 @@ class RequestPermissionEvent : UnicornEventBase<RequestPermissionEventEntry> {
return ResUtil.getString(R.string.permission_denied_tips_mic) 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_SELECT_MEDIA,
RequestPermissionEventEntry.SCENES_TAKE_VIDEO,
RequestPermissionEventEntry.SCENES_SAVE_IMAGE, RequestPermissionEventEntry.SCENES_SAVE_IMAGE,
RequestPermissionEventEntry.SCENES_SAVE_VIDEO, RequestPermissionEventEntry.SCENES_SAVE_VIDEO,
RequestPermissionEventEntry.SCENES_SELECT_VIDEO, RequestPermissionEventEntry.SCENES_SELECT_VIDEO,
RequestPermissionEventEntry.SCENES_SELECT_FILE, RequestPermissionEventEntry.SCENES_SELECT_FILE,
RequestPermissionEventEntry.SCENES_SELECT_IMAGE, RequestPermissionEventEntry.SCENES_SELECT_IMAGE,
RequestPermissionEventEntry.SCENES_TAKE_PHOTO,
RequestPermissionEventEntry.SCENES_VIDEO_CHAT -> { RequestPermissionEventEntry.SCENES_VIDEO_CHAT -> {
return ResUtil.getString(R.string.permission_denied_tips_image) return ResUtil.getString(R.string.permission_denied_tips_image)
} }

View File

@@ -8,12 +8,15 @@ import android.view.View
import com.netease.nim.uikit.StatusBarUtil import com.netease.nim.uikit.StatusBarUtil
import com.nnbc123.app.R import com.nnbc123.app.R
import com.nnbc123.app.base.BaseBindingActivity import com.nnbc123.app.base.BaseBindingActivity
import com.nnbc123.app.common.permission.PermissionHelper
import com.nnbc123.app.databinding.ActivitySkillEditBinding 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.SkillDataManager
import com.nnbc123.app.skill.repository.SkillModel import com.nnbc123.app.skill.repository.SkillModel
import com.nnbc123.app.skill.widget.CARD_TYPE_AUDIO 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.annatation.ActLayoutRes
import com.nnbc123.library.utils.ResUtil
@ActLayoutRes(R.layout.activity_skill_edit) @ActLayoutRes(R.layout.activity_skill_edit)
class AddSkillActivity : BaseBindingActivity<ActivitySkillEditBinding>() { class AddSkillActivity : BaseBindingActivity<ActivitySkillEditBinding>() {
@@ -79,11 +82,24 @@ class AddSkillActivity : BaseBindingActivity<ActivitySkillEditBinding>() {
@SuppressLint("CheckResult") @SuppressLint("CheckResult")
private fun checkPermissionAndDeal(it: SkillPropertyEntity) { 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.RECORD_AUDIO,
Manifest.permission.WRITE_EXTERNAL_STORAGE Manifest.permission.WRITE_EXTERNAL_STORAGE
) )
if (RequestPermissionPromptDialog.isNeedPrompt() && !PermissionHelper.isAllGranted(
rxPermissions,
*params
)
) {
RequestPermissionPromptDialog(this, tips).show()
}
checkPermission(*params)
.subscribe { aBoolean: Boolean -> .subscribe { aBoolean: Boolean ->
RequestPermissionPromptDialog.dismissCurrentDialog()
if (aBoolean) { if (aBoolean) {
setSkillViewData(it) setSkillViewData(it)
} else { } else {

View File

@@ -327,7 +327,7 @@ public class MessageFragment extends TFragment implements ModuleProxy, MessageLi
private void requestPermission(Consumer<Boolean> consumer, String tips, String... perms) { private void requestPermission(Consumer<Boolean> consumer, String tips, String... perms) {
Context context = getContext(); Context context = getContext();
if (context != null && RequestPermissionPromptDialog.Companion.isNeedPrompt() if (context != null && RequestPermissionPromptDialog.Companion.isNeedPrompt()
&& !PermissionHelper.INSTANCE.isAllGender(rxPermissions, perms)) { && !PermissionHelper.INSTANCE.isAllGranted(rxPermissions, perms)) {
new RequestPermissionPromptDialog(context, tips).show(); new RequestPermissionPromptDialog(context, tips).show();
} }
Disposable disposable = rxPermissions.request(perms).subscribe(aBoolean -> { Disposable disposable = rxPermissions.request(perms).subscribe(aBoolean -> {
@@ -625,12 +625,16 @@ public class MessageFragment extends TFragment implements ModuleProxy, MessageLi
@Subscribe(threadMode = ThreadMode.MAIN) @Subscribe(threadMode = ThreadMode.MAIN)
@SuppressLint("CheckResult") @SuppressLint("CheckResult")
public void onNimAudioChatEvent(NimAudioChatEvent event) { public void onNimAudioChatEvent(NimAudioChatEvent event) {
String[] perms = new String[]{Manifest.permission.WRITE_EXTERNAL_STORAGE, String[] perms = new String[]{
Manifest.permission.READ_EXTERNAL_STORAGE, Manifest.permission.RECORD_AUDIO,
Manifest.permission.RECORD_AUDIO}; Manifest.permission.WRITE_EXTERNAL_STORAGE,
String tips = ResUtil.getString(R.string.permission_denied_tips_mic); Manifest.permission.READ_EXTERNAL_STORAGE};
StringBuffer sb = new StringBuffer();
sb.append("1.").append(ResUtil.getString(R.string.permission_denied_tips_mic))
.append("\n2.").append(ResUtil.getString(R.string.permission_denied_tips_image));
String tips = sb.toString();
if (RequestPermissionPromptDialog.Companion.isNeedPrompt() if (RequestPermissionPromptDialog.Companion.isNeedPrompt()
&& !PermissionHelper.INSTANCE.isAllGender(rxPermissions, perms)) { && !PermissionHelper.INSTANCE.isAllGranted(rxPermissions, perms)) {
new RequestPermissionPromptDialog(requireContext(), tips).show(); new RequestPermissionPromptDialog(requireContext(), tips).show();
} }
checkPermission(perms) checkPermission(perms)

View File

@@ -989,4 +989,5 @@
<string name="diamond_inning">%d钻/局</string> <string name="diamond_inning">%d钻/局</string>
<string name="permission_denied_tips_mic">为了实现连麦及语音输入等功能,请您允许应用向您获取“麦克风”权限</string> <string name="permission_denied_tips_mic">为了实现连麦及语音输入等功能,请您允许应用向您获取“麦克风”权限</string>
<string name="permission_denied_tips_image">访问你的本地内容,以能正常使用图片上传、视频发送等应用功能</string> <string name="permission_denied_tips_image">访问你的本地内容,以能正常使用图片上传、视频发送等应用功能</string>
<string name="permission_denied_tips_camera">用于拍摄更新个人头像、发布动态、与客服反馈问题时进行照片和视频的拍摄录制</string>
</resources> </resources>

View File

@@ -201,7 +201,7 @@ public class PublishActivity extends BaseMvpActivity<IPublishView, PublishPresen
String tips = ResUtil.getString(R.string.permission_denied_tips_image); String tips = ResUtil.getString(R.string.permission_denied_tips_image);
String permission = Manifest.permission.READ_EXTERNAL_STORAGE; String permission = Manifest.permission.READ_EXTERNAL_STORAGE;
if (RequestPermissionPromptDialog.Companion.isNeedPrompt() if (RequestPermissionPromptDialog.Companion.isNeedPrompt()
&& !PermissionHelper.INSTANCE.isAllGender(rxPermissions, permission)) { && !PermissionHelper.INSTANCE.isAllGranted(rxPermissions, permission)) {
new RequestPermissionPromptDialog(this, tips).show(); new RequestPermissionPromptDialog(this, tips).show();
} }
checkPermission((aBoolean) -> { checkPermission((aBoolean) -> {

View File

@@ -4,11 +4,13 @@ import android.Manifest;
import android.annotation.SuppressLint; import android.annotation.SuppressLint;
import android.content.Context; import android.content.Context;
import android.content.Intent; import android.content.Intent;
import android.net.Uri;
import android.os.Bundle; import android.os.Bundle;
import androidx.fragment.app.Fragment; import androidx.fragment.app.Fragment;
import androidx.viewpager.widget.ViewPager; import androidx.viewpager.widget.ViewPager;
import android.provider.Settings;
import android.view.View; import android.view.View;
import android.widget.ImageView; import android.widget.ImageView;
@@ -16,10 +18,13 @@ import com.flyco.tablayout.SlidingTabLayout;
import com.netease.nim.uikit.StatusBarUtil; import com.netease.nim.uikit.StatusBarUtil;
import com.nnbc123.app.R; import com.nnbc123.app.R;
import com.nnbc123.app.base.BaseMvpActivity; 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.public_chat_hall.adapter.PagerDataAdapter;
import com.nnbc123.app.music.fragment.LocalMusicListFragment; import com.nnbc123.app.music.fragment.LocalMusicListFragment;
import com.nnbc123.app.music.fragment.ShareMusicListFragment; import com.nnbc123.app.music.fragment.ShareMusicListFragment;
import com.nnbc123.app.music.presenter.MusicListPresenter; 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.auth.event.KickOutEvent;
import com.nnbc123.core.music.db.bean.LocalMusicBean; import com.nnbc123.core.music.db.bean.LocalMusicBean;
import com.nnbc123.core.statistic.StatisticManager; import com.nnbc123.core.statistic.StatisticManager;
@@ -27,6 +32,7 @@ import com.nnbc123.core.statistic.protocol.StatisticsProtocol;
import com.nnbc123.library.base.factory.CreatePresenter; import com.nnbc123.library.base.factory.CreatePresenter;
import com.nnbc123.core.music.event.JumpToShareMusicListFragmentEvent; import com.nnbc123.core.music.event.JumpToShareMusicListFragmentEvent;
import com.nnbc123.core.music.view.IMusicListView; import com.nnbc123.core.music.view.IMusicListView;
import com.nnbc123.library.utils.ResUtil;
import org.greenrobot.eventbus.EventBus; import org.greenrobot.eventbus.EventBus;
import org.greenrobot.eventbus.Subscribe; import org.greenrobot.eventbus.Subscribe;
@@ -95,15 +101,46 @@ public class MusicListActivity extends BaseMvpActivity<IMusicListView, MusicList
page = getIntent().getIntExtra(KEY_PAGE, page); page = getIntent().getIntExtra(KEY_PAGE, page);
viewPager.setCurrentItem(page); viewPager.setCurrentItem(page);
StatisticManager.Instance().onEvent(StatisticsProtocol.ROOM_SHARING_MUSIC, "共享音乐"); StatisticManager.Instance().onEvent(StatisticsProtocol.ROOM_SHARING_MUSIC, "共享音乐");
checkPermission(Manifest.permission.READ_EXTERNAL_STORAGE) String tips = ResUtil.getString(R.string.permission_denied_tips_image);
String params = Manifest.permission.READ_EXTERNAL_STORAGE;
if (RequestPermissionPromptDialog.Companion.isNeedPrompt() && !PermissionHelper.INSTANCE.isAllGranted(
rxPermissions, params)
) {
new RequestPermissionPromptDialog(this, tips).show();
}
checkPermission(params)
.compose(bindToLifecycle()) .compose(bindToLifecycle())
.subscribe(aBoolean -> { .subscribe(aBoolean -> {
RequestPermissionPromptDialog.Companion.dismissCurrentDialog();
if (!aBoolean) { 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 @Override
protected void onDestroy() { protected void onDestroy() {
super.onDestroy(); super.onDestroy();