feat:针对华为市场审核 补充权限申请提示
This commit is contained in:
@@ -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
|
||||||
}
|
}
|
||||||
}
|
}
|
@@ -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)
|
||||||
}
|
}
|
||||||
|
@@ -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 {
|
||||||
|
@@ -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)
|
||||||
|
@@ -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>
|
||||||
|
@@ -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) -> {
|
||||||
|
@@ -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();
|
||||||
|
Reference in New Issue
Block a user