1:添加权限说明

2:聊天添加举报按钮
This commit is contained in:
2025-10-30 18:13:59 +08:00
parent a5ebc83dea
commit a993a7710f
21 changed files with 423 additions and 361 deletions

View File

@@ -1,20 +1,24 @@
package com.xscm.modulemain.activity;
import android.Manifest;
import android.app.AlertDialog;
import android.content.Context;
import android.content.DialogInterface;
import android.content.Intent;
import android.content.pm.PackageInfo;
import android.content.pm.PackageManager;
import android.graphics.Color;
import android.net.Uri;
import android.os.Build;
import android.os.Bundle;
import android.os.Handler;
import android.provider.Settings;
import android.text.TextUtils;
import android.util.Log;
import android.view.Gravity;
import android.view.KeyEvent;
import android.view.View;
import android.view.ViewGroup;
import android.view.animation.Animation;
import android.view.animation.AnimationUtils;
import android.widget.ImageView;
@@ -22,6 +26,9 @@ import android.widget.Toast;
import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import androidx.coordinatorlayout.widget.CoordinatorLayout;
import androidx.core.app.ActivityCompat;
import androidx.core.content.ContextCompat;
import androidx.fragment.app.Fragment;
import com.alibaba.android.arouter.facade.annotation.Route;
@@ -33,8 +40,11 @@ import com.example.modulecircle.fragment.CircleFragment;
import com.example.modulenews.fragment.NewsFragment;
import com.example.modulevocal.fragment.VocalRangeFragment;
import com.example.modulevoice.fragment.VoiceFragment;
import com.google.android.material.snackbar.Snackbar;
import com.permissionx.guolindev.PermissionX;
import com.permissionx.guolindev.callback.ExplainReasonCallback;
import com.permissionx.guolindev.callback.RequestCallback;
import com.permissionx.guolindev.request.ExplainScope;
import com.stx.xhb.xbanner.XBanner;
import com.xscm.modulemain.R;
import com.xscm.modulemain.contacts.HomeContacts;
@@ -63,6 +73,7 @@ import com.tencent.imsdk.v2.V2TIMValueCallback;
import org.greenrobot.eventbus.EventBus;
import org.greenrobot.eventbus.Subscribe;
import org.greenrobot.eventbus.ThreadMode;
import org.jetbrains.annotations.NotNull;
import java.util.ArrayList;
import java.util.HashMap;
@@ -565,15 +576,15 @@ public class MainActivity extends BaseMvpActivity<HomePresenter, ActivityMainBin
}
private void requestGpsPermissions() {
PermissionDescriptionHelper.addPermissionDescription(false, (ViewGroup) mBinding.getRoot(), new String[]{Manifest.permission.ACCESS_FINE_LOCATION});
PermissionX.init(this)
// 请求精确位置权限包含GPS定位能力
.permissions(
Manifest.permission.ACCESS_FINE_LOCATION
)
// 权限请求结果回调
.permissions(Manifest.permission.ACCESS_FINE_LOCATION)
.request(new RequestCallback() {
@Override
public void onResult(boolean allGranted, List<String> grantedList, List<String> deniedList) {
PermissionDescriptionHelper.removePermissionDescription((ViewGroup) mBinding.getRoot());
if (allGranted) {
// Toast.makeText(MainActivity.this, "GPS权限已授予可开始定位", Toast.LENGTH_SHORT).show();
initLocation(); // 启动GPS定位逻辑
@@ -583,6 +594,83 @@ public class MainActivity extends BaseMvpActivity<HomePresenter, ActivityMainBin
}
});
}
private static final int REQUEST_CODE_LOCATION_PERMISSION = 1001;
private void requestLocationPermission() {
// 检查是否已拥有权限
if (ContextCompat.checkSelfPermission(
this,
Manifest.permission.ACCESS_FINE_LOCATION
) == PackageManager.PERMISSION_GRANTED) {
// 已授权,执行定位相关任务
performLocationTask();
}
// 判断是否需要展示解释性说明
else if (ActivityCompat.shouldShowRequestPermissionRationale(
this,
Manifest.permission.ACCESS_FINE_LOCATION
)) {
// 展示自定义的解释对话框
showPermissionExplanationDialog();
}
else {
// 首次请求,或用户选择了"不再询问",直接请求权限
directlyRequestPermissions();
}
}
private void showPermissionExplanationDialog() {
new AlertDialog.Builder(this)
.setTitle("需要位置权限")
.setMessage("我们使用您的位置信息来为您提供周边的地图导航服务、展示订单热力图,并为您推荐附近的订单。此功能需要获取您的位置信息。")
.setPositiveButton("同意", (dialog, which) -> {
// 用户点击同意后,请求权限
directlyRequestPermissions();
})
.setNegativeButton("取消", (dialog, which) -> {
// 处理用户取消的情况
})
.show();
}
private void directlyRequestPermissions() {
String[] permissionsToRequest;
// 根据Android版本决定请求的权限
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.Q) {
// Android 10 (API 29) 及以上可以同时请求前台和后台定位权限注意在Android 11及以后策略有变
permissionsToRequest = new String[] {
Manifest.permission.ACCESS_FINE_LOCATION,
Manifest.permission.ACCESS_COARSE_LOCATION
// 在Android 11上不建议在此同时申请后台权限
};
} else {
// Android 9及以下
permissionsToRequest = new String[] {
Manifest.permission.ACCESS_FINE_LOCATION,
Manifest.permission.ACCESS_COARSE_LOCATION
};
}
ActivityCompat.requestPermissions(
this,
permissionsToRequest,
REQUEST_CODE_LOCATION_PERMISSION // 定义你的请求码,例如 1001
);
}
private void performLocationTask() {
// 执行定位任务
initLocation();
}
private void handlePermissionDenial() {
// 处理权限被拒绝的情况
Toast.makeText(this, "位置权限被拒绝,相关功能无法使用", Toast.LENGTH_SHORT).show();
}
@Subscribe(threadMode = ThreadMode.MAIN)
public void onEvent(UnreadCountEvent event) {