feat:完善部分场景的权限拒绝提示
This commit is contained in:
@@ -3,13 +3,16 @@ package com.nnbc123.app.avroom.fragment
|
||||
import android.Manifest
|
||||
import android.annotation.SuppressLint
|
||||
import android.app.Activity
|
||||
import android.content.Context
|
||||
import android.content.DialogInterface
|
||||
import android.content.Intent
|
||||
import android.content.pm.PackageManager
|
||||
import android.graphics.Color
|
||||
import android.graphics.drawable.Drawable
|
||||
import android.graphics.drawable.GradientDrawable
|
||||
import android.net.Uri
|
||||
import android.os.Bundle
|
||||
import android.provider.Settings
|
||||
import android.text.TextUtils
|
||||
import android.text.style.ForegroundColorSpan
|
||||
import android.view.*
|
||||
@@ -115,6 +118,7 @@ import com.netease.nimlib.sdk.chatroom.ChatRoomMessageBuilder
|
||||
import com.netease.nimlib.sdk.chatroom.model.ChatRoomKickOutEvent
|
||||
import com.netease.nimlib.sdk.chatroom.model.ChatRoomMessage
|
||||
import com.nnbc123.app.avroom.hour_rank.RoomHourRankWidget
|
||||
import com.nnbc123.app.ui.widget.dialog.CommonTipDialog
|
||||
import com.orhanobut.logger.Logger
|
||||
import com.tbruyelle.rxpermissions2.RxPermissions
|
||||
import com.trello.rxlifecycle3.android.FragmentEvent
|
||||
@@ -1146,11 +1150,37 @@ open class BaseRoomFragment<V : IBaseRoomView?, P : BaseRoomPresenter<V>?> :
|
||||
if (result) {
|
||||
mvpPresenter?.upMicroPhone(micPosition, currentUid, b)
|
||||
} else {
|
||||
toast("请给予麦克风权限后再试!")
|
||||
showDeniedTips(
|
||||
requireContext(),
|
||||
"为了实现连麦及语音输入等功能,请您允许应用向您获取“麦克风”权限"
|
||||
)
|
||||
}
|
||||
}, { throwable: Throwable? -> toast("发生一些异常,请稍后重试!") })
|
||||
}
|
||||
|
||||
private fun showDeniedTips(context: Context, message: String) {
|
||||
CommonTipDialog(context).apply {
|
||||
setTipMsg(message)
|
||||
setOkText("去设置")
|
||||
setOnActionListener(
|
||||
object : CommonTipDialog.OnActionListener {
|
||||
override fun onOk() {
|
||||
//同意跳到应用详情页面
|
||||
val packageUri =
|
||||
Uri.parse("package:${context.packageName}")
|
||||
val intent = Intent(
|
||||
Settings.ACTION_APPLICATION_DETAILS_SETTINGS,
|
||||
packageUri
|
||||
)
|
||||
(context as? Activity)?.startActivityForResult(
|
||||
intent, 0
|
||||
)
|
||||
}
|
||||
}
|
||||
)
|
||||
}.show()
|
||||
}
|
||||
|
||||
/**
|
||||
* 是否有麦克风权限
|
||||
*
|
||||
|
@@ -114,6 +114,7 @@ import java.lang.reflect.Field;
|
||||
import java.lang.reflect.Method;
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
import java.util.function.Consumer;
|
||||
|
||||
import io.reactivex.Observable;
|
||||
import io.reactivex.android.schedulers.AndroidSchedulers;
|
||||
@@ -821,6 +822,17 @@ public abstract class BaseActivity extends RxAppCompatActivity
|
||||
}, Throwable::printStackTrace);
|
||||
}
|
||||
|
||||
|
||||
@SuppressLint("CheckResult")
|
||||
public void checkPermission(Consumer<Boolean> consumer, String... mPerms) {
|
||||
rxPermissions.request(mPerms)
|
||||
.subscribe(aBoolean -> {
|
||||
if (consumer != null) {
|
||||
consumer.accept(aBoolean);
|
||||
}
|
||||
}, Throwable::printStackTrace);
|
||||
}
|
||||
|
||||
@SuppressLint("CheckResult")
|
||||
public Observable<Boolean> checkPermission(String... mPerms) {
|
||||
return rxPermissions.request(mPerms);
|
||||
|
@@ -21,6 +21,11 @@ import com.qiyukf.unicorn.api.YSFOptions;
|
||||
import com.qiyukf.unicorn.api.YSFUserInfo;
|
||||
import com.qiyukf.unicorn.api.customization.input.ActionPanelOptions;
|
||||
import com.qiyukf.unicorn.api.customization.input.InputPanelOptions;
|
||||
import com.qiyukf.unicorn.api.event.EventCallback;
|
||||
import com.qiyukf.unicorn.api.event.EventProcessFactory;
|
||||
import com.qiyukf.unicorn.api.event.SDKEvents;
|
||||
import com.qiyukf.unicorn.api.event.UnicornEventBase;
|
||||
import com.qiyukf.unicorn.api.event.entry.RequestPermissionEventEntry;
|
||||
import com.soundcloud.android.crop.UriUtil;
|
||||
|
||||
import java.util.ArrayList;
|
||||
@@ -109,7 +114,17 @@ public class CustomerServerHelper {
|
||||
options.uiCustomization.leftAvatar = uri.toString();
|
||||
|
||||
options.uiCustomization.titleCenter = true;
|
||||
|
||||
options.sdkEvents = new SDKEvents();
|
||||
options.sdkEvents.eventProcessFactory = new EventProcessFactory() {
|
||||
@Override
|
||||
public UnicornEventBase eventOf(int i) {
|
||||
if (i == 5) {
|
||||
return new RequestPermissionEvent();
|
||||
} else {
|
||||
return null;
|
||||
}
|
||||
}
|
||||
};
|
||||
// appKey 可以在七鱼管理系统->设置->App 接入 页面找到
|
||||
Unicorn.init(context, XChatConstants.QI_YU_KF_KEY, options, new GlideImageLoader(context));
|
||||
Unicorn.initSdk();
|
||||
@@ -133,5 +148,4 @@ public class CustomerServerHelper {
|
||||
Unicorn.logout();
|
||||
isInit = false;
|
||||
}
|
||||
|
||||
}
|
||||
|
@@ -0,0 +1,67 @@
|
||||
package com.nnbc123.app.qiyukefu
|
||||
|
||||
import android.Manifest
|
||||
import android.app.Activity
|
||||
import android.content.Context
|
||||
import android.content.Intent
|
||||
import android.net.Uri
|
||||
import android.provider.Settings
|
||||
import com.nnbc123.app.ui.widget.dialog.CommonTipDialog
|
||||
import com.qiyukf.unicorn.api.event.EventCallback
|
||||
import com.qiyukf.unicorn.api.event.UnicornEventBase
|
||||
import com.qiyukf.unicorn.api.event.entry.RequestPermissionEventEntry
|
||||
|
||||
/**
|
||||
* Created by Max on 2024/1/4 11:10
|
||||
* Desc:
|
||||
**/
|
||||
class RequestPermissionEvent : UnicornEventBase<RequestPermissionEventEntry> {
|
||||
override fun onEvent(
|
||||
p0: RequestPermissionEventEntry?,
|
||||
p1: Context?,
|
||||
p2: EventCallback<RequestPermissionEventEntry>?
|
||||
) {
|
||||
p2?.onNotPorcessEvent()
|
||||
}
|
||||
|
||||
override fun onDenyEvent(p0: Context?, p1: RequestPermissionEventEntry?): Boolean {
|
||||
if (p0 == null) {
|
||||
return super.onDenyEvent(p0, p1)
|
||||
}
|
||||
if (p1?.permissionList?.firstOrNull {
|
||||
it == Manifest.permission.RECORD_AUDIO
|
||||
} != null) {
|
||||
showDeniedTips(p0, "为了实现连麦及语音输入等功能,请您允许应用向您获取“麦克风”权限")
|
||||
return true
|
||||
} else if (p1?.permissionList?.firstOrNull {
|
||||
it == "android.permission.CAMERA" || it == "android.permission.READ_MEDIA_IMAGES" || it == "android.permission.READ_MEDIA_VIDEO"
|
||||
} != null) {
|
||||
showDeniedTips(p0, "访问你的本地内容,以能正常使用图片上传、视频发送等应用功能")
|
||||
return true
|
||||
}
|
||||
return super.onDenyEvent(p0, p1)
|
||||
}
|
||||
|
||||
private fun showDeniedTips(context: Context, message: String) {
|
||||
CommonTipDialog(context).apply {
|
||||
setTipMsg(message)
|
||||
setOkText("去设置")
|
||||
setOnActionListener(
|
||||
object : CommonTipDialog.OnActionListener {
|
||||
override fun onOk() {
|
||||
//同意跳到应用详情页面
|
||||
val packageUri =
|
||||
Uri.parse("package:${context.packageName}")
|
||||
val intent = Intent(
|
||||
Settings.ACTION_APPLICATION_DETAILS_SETTINGS,
|
||||
packageUri
|
||||
)
|
||||
(context as? Activity)?.startActivityForResult(
|
||||
intent, 0
|
||||
)
|
||||
}
|
||||
}
|
||||
)
|
||||
}.show()
|
||||
}
|
||||
}
|
@@ -7,6 +7,7 @@ import android.graphics.Color;
|
||||
import android.media.AudioManager;
|
||||
import android.net.Uri;
|
||||
import android.os.Bundle;
|
||||
import android.provider.Settings;
|
||||
import android.text.SpannableString;
|
||||
import android.text.Spanned;
|
||||
import android.text.TextUtils;
|
||||
@@ -59,6 +60,7 @@ import com.nnbc123.app.ui.im.MessageListPanelEx;
|
||||
import com.nnbc123.app.ui.im.chat.MVHChatterBoxStart;
|
||||
import com.nnbc123.app.ui.im.model.IMCustomModel;
|
||||
import com.nnbc123.app.ui.webview.CommonWebViewActivity;
|
||||
import com.nnbc123.app.ui.widget.dialog.CommonTipDialog;
|
||||
import com.nnbc123.app.utils.PushMessageHandler;
|
||||
import com.nnbc123.core.UriProvider;
|
||||
import com.nnbc123.core.auth.AuthModel;
|
||||
@@ -612,11 +614,34 @@ public class MessageFragment extends TFragment implements ModuleProxy, MessageLi
|
||||
if (result) {
|
||||
event.getSuccess().accept(result);
|
||||
} else {
|
||||
SingleToastUtil.showToast(getString(R.string.ask_again));
|
||||
showPermissionDeniedTipsDialog("为了实现连麦及语音输入等功能,请您允许应用向您获取“麦克风”权限");
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
private void showPermissionDeniedTipsDialog(String message){
|
||||
CommonTipDialog mPrivacyDialog = new CommonTipDialog(getContext());
|
||||
mPrivacyDialog.setTipMsg(message);
|
||||
mPrivacyDialog.setOkText("去设置");
|
||||
mPrivacyDialog.setOnActionListener(
|
||||
new CommonTipDialog.OnActionListener() {
|
||||
@Override
|
||||
public void onOk() {
|
||||
//同意跳到应用详情页面
|
||||
Uri packageUri = Uri.parse("package:" + getContext().getPackageName());
|
||||
Intent intent = new Intent(
|
||||
Settings.ACTION_APPLICATION_DETAILS_SETTINGS,
|
||||
packageUri
|
||||
);
|
||||
startActivityForResult(
|
||||
intent, 0
|
||||
);
|
||||
}
|
||||
}
|
||||
);
|
||||
mPrivacyDialog.show();
|
||||
}
|
||||
|
||||
@Subscribe(threadMode = ThreadMode.MAIN)
|
||||
@SuppressLint("CheckResult")
|
||||
public void onNimImageActionEvent(NimImageActionEvent event) {
|
||||
|
@@ -3,11 +3,13 @@ package com.nnbc123.app.community.publish.view;
|
||||
import android.Manifest;
|
||||
import android.content.Context;
|
||||
import android.content.Intent;
|
||||
import android.net.Uri;
|
||||
import android.os.Bundle;
|
||||
|
||||
import androidx.recyclerview.widget.GridLayoutManager;
|
||||
import androidx.recyclerview.widget.RecyclerView;
|
||||
|
||||
import android.provider.Settings;
|
||||
import android.text.Editable;
|
||||
import android.text.TextUtils;
|
||||
import android.text.TextWatcher;
|
||||
@@ -21,8 +23,10 @@ import android.widget.RelativeLayout;
|
||||
import android.widget.TextView;
|
||||
|
||||
import com.google.android.flexbox.FlexboxLayout;
|
||||
import com.hjq.toast.ToastUtils;
|
||||
import com.netease.nim.uikit.StatusBarUtil;
|
||||
import com.netease.nim.uikit.common.util.log.LogUtil;
|
||||
import com.nnbc123.app.ui.widget.dialog.CommonTipDialog;
|
||||
import com.trello.rxlifecycle3.android.ActivityEvent;
|
||||
import com.nnbc123.app.R;
|
||||
import com.nnbc123.app.base.BaseMvpActivity;
|
||||
@@ -191,26 +195,29 @@ public class PublishActivity extends BaseMvpActivity<IPublishView, PublishPresen
|
||||
imageAdapter.setOnItemClickListener((adapter, view, position) -> {
|
||||
PublishItem item = imageShowList.get(position);
|
||||
if (item.isAddItem()) {
|
||||
checkPermission(() -> {
|
||||
CaptureStrategy captureStrategy = new CaptureStrategy(true, context.getPackageName() + ".fileprovider",
|
||||
BasicConfig.INSTANCE.getImageDir().getAbsolutePath());
|
||||
int maxCanSelect = 9 - uploadList.size();
|
||||
Matisse.from(PublishActivity.this)
|
||||
.choose(MimeType.ofImage())
|
||||
.showSingleMediaType(true)
|
||||
.capture(true)
|
||||
.spanCount(4)
|
||||
.captureStrategy(captureStrategy)
|
||||
.countable(true)
|
||||
.maxSelectable(maxCanSelect)
|
||||
.originalEnable(false)
|
||||
.maxOriginalSize(10)
|
||||
.imageEngine(new Glide4Engine())
|
||||
.setType(2)
|
||||
.setOriginalImagee(isOriginalImage)
|
||||
.forResult(ConstantValue.CODE_CHOOSE_PHOTO);
|
||||
}, R.string.ask_storage, Manifest.permission.READ_EXTERNAL_STORAGE);
|
||||
|
||||
checkPermission((aBoolean) -> {
|
||||
if (aBoolean) {
|
||||
CaptureStrategy captureStrategy = new CaptureStrategy(true, context.getPackageName() + ".fileprovider",
|
||||
BasicConfig.INSTANCE.getImageDir().getAbsolutePath());
|
||||
int maxCanSelect = 9 - uploadList.size();
|
||||
Matisse.from(PublishActivity.this)
|
||||
.choose(MimeType.ofImage())
|
||||
.showSingleMediaType(true)
|
||||
.capture(true)
|
||||
.spanCount(4)
|
||||
.captureStrategy(captureStrategy)
|
||||
.countable(true)
|
||||
.maxSelectable(maxCanSelect)
|
||||
.originalEnable(false)
|
||||
.maxOriginalSize(10)
|
||||
.imageEngine(new Glide4Engine())
|
||||
.setType(2)
|
||||
.setOriginalImagee(isOriginalImage)
|
||||
.forResult(ConstantValue.CODE_CHOOSE_PHOTO);
|
||||
} else {
|
||||
showPermissionDeniedDialog();
|
||||
}
|
||||
}, Manifest.permission.READ_EXTERNAL_STORAGE);
|
||||
} else {
|
||||
BigPhotoActivity.startCanDelete(PublishActivity.this, (ArrayList<CustomItem>) uploadList,
|
||||
position, new PagerOption().setDelete(true));
|
||||
@@ -230,6 +237,29 @@ public class PublishActivity extends BaseMvpActivity<IPublishView, PublishPresen
|
||||
updateImagesData();
|
||||
}
|
||||
|
||||
private void showPermissionDeniedDialog(){
|
||||
CommonTipDialog mPrivacyDialog = new CommonTipDialog(context);
|
||||
mPrivacyDialog.setTipMsg("访问你的本地内容,以能正常使用图片上传、视频发送等应用功能");
|
||||
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();
|
||||
}
|
||||
|
||||
private void updateImagesData() {
|
||||
List<PublishItem> tmp = new ArrayList<>();
|
||||
for (int i = 0; i < uploadList.size(); i++) {
|
||||
|
Reference in New Issue
Block a user