package com.dayu.pipirrapp.observer; import android.app.Activity; import android.text.TextUtils; import androidx.annotation.NonNull; import androidx.lifecycle.DefaultLifecycleObserver; import androidx.lifecycle.LifecycleOwner; import com.dayu.pipirrapp.MyApplication; import com.dayu.pipirrapp.bean.db.TagBean; import com.dayu.pipirrapp.dao.DaoSingleton; import com.dayu.pipirrapp.view.TagDialog; import com.hjq.permissions.OnPermissionCallback; import com.hjq.permissions.Permission; import com.hjq.permissions.XXPermissions; import java.util.List; /** * author: zuo * Date: 2024-01-11 * Time: 15:47 * 备注:登录页相关逻辑 */ public class LoginObserver implements DefaultLifecycleObserver { protected String[] needPermissions = { Permission.ACCESS_COARSE_LOCATION, Permission.ACCESS_FINE_LOCATION, Permission.WRITE_EXTERNAL_STORAGE, Permission.READ_EXTERNAL_STORAGE, Permission.READ_PHONE_STATE }; Activity myActivity; public LoginObserver(@NonNull Activity activity) { myActivity = activity; } @Override public void onCreate(@NonNull LifecycleOwner owner) { DefaultLifecycleObserver.super.onCreate(owner); getPermissions(); } private void getPermissions() { try { XXPermissions.with(myActivity) // 申请单个权限 // .permission(Permission.RECORD_AUDIO) // 申请多个权限 .permission(needPermissions) // 设置权限请求拦截器(局部设置) //.interceptor(new PermissionInterceptor()) // 设置不触发错误检测机制(局部设置) //.unchecked() .request(new OnPermissionCallback() { @Override public void onGranted(@NonNull List permissions, boolean allGranted) { if (permissions.contains(Permission.WRITE_EXTERNAL_STORAGE)) { TagBean tagBean = DaoSingleton.getInstance(myActivity).tagDao().findFirst(); if (tagBean == null || TextUtils.isEmpty(tagBean.getTag())) { choesLibrary(); } else { MyApplication.myApplication.myTag = tagBean.getTag(); } } if (!allGranted) { // toast("获取部分权限成功,但部分权限未正常授予"); } } @Override public void onDenied(@NonNull List permissions, boolean doNotAskAgain) { if (doNotAskAgain) { // toast("被永久拒绝授权,请手动授予录音和日历权限"); // 如果是被永久拒绝就跳转到应用权限系统设置页面 } else { // toast("获取录音和日历权限失败"); } } }); } catch (Throwable e) { e.printStackTrace(); } } /** * 选择版本 */ public void choesLibrary() { TagDialog dialog = new TagDialog(myActivity, type -> { }); dialog.show(); } }