权限控制

This commit is contained in:
jia 2024-12-07 22:38:19 +08:00
parent 75d4f0eaec
commit 7f655581a9
9 changed files with 280 additions and 80 deletions

View File

@ -26,5 +26,5 @@ android.enableJetifier=true
android.useAndroidX=true
android.useDeprecatedNdk=true
versionCode=40
versionName=4.11.3
versionCode=58
versionName=4.11.17.3

View File

@ -21,8 +21,9 @@
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
<uses-permission android:name="android.permission.BLUETOOTH_CONNECT" />
<uses-permission android:name="android.permission.BLUETOOTH_SCAN" />
<!-- // jiablue-->
<!-- <uses-permission android:name="android.permission.BLUETOOTH_CONNECT" />-->
<!-- <uses-permission android:name="android.permission.BLUETOOTH_SCAN" />-->
<uses-permission android:name="android.permission.CHANGE_NETWORK_STATE" />
<uses-permission android:name="android.permission.CHANGE_WIFI_STATE" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
@ -86,13 +87,14 @@
<!-- 蓝牙权限需求 -->
<uses-permission android:name="android.permission.BLUETOOTH" />
<uses-permission android:name="android.permission.BLUETOOTH_ADMIN" /> <!-- 安卓12新增的蓝牙权限 -->
<uses-permission android:name="android.permission.BLUETOOTH_ADVERTISE" />
<uses-permission android:name="android.permission.BLUETOOTH_CONNECT" />
<uses-permission android:name="android.permission.BLUETOOTH_SCAN" /> <!-- 定位权限, 蓝牙搜索需要 -->
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
<!-- // jiablue-->
<!-- <uses-permission android:name="android.permission.BLUETOOTH" />-->
<!-- <uses-permission android:name="android.permission.BLUETOOTH_ADMIN" /> &lt;!&ndash; 安卓12新增的蓝牙权限 &ndash;&gt;-->
<!-- <uses-permission android:name="android.permission.BLUETOOTH_ADVERTISE" />-->
<!-- <uses-permission android:name="android.permission.BLUETOOTH_CONNECT" />-->
<!-- <uses-permission android:name="android.permission.BLUETOOTH_SCAN" /> &lt;!&ndash; 定位权限, 蓝牙搜索需要 &ndash;&gt;-->
<!-- <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />-->
<!-- <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />-->
<!-- 使用相机 -->
<!--
<uses-feature

View File

@ -46,14 +46,15 @@ public class BindTwoDeviceActivity extends BaseActivity {
setContentView(R.layout.bindtwodevice_activity);
initTitle("选择设备");
if(Build.VERSION.SDK_INT >= Build.VERSION_CODES.S){
perlist = new String[]{
android.Manifest.permission.BLUETOOTH_SCAN,
android.Manifest.permission.BLUETOOTH_ADVERTISE,
android.Manifest.permission.BLUETOOTH_CONNECT,
android.Manifest.permission.ACCESS_FINE_LOCATION,
android.Manifest.permission.ACCESS_COARSE_LOCATION,
android.Manifest.permission.BLUETOOTH
};
// jiablue
// perlist = new String[]{
// android.Manifest.permission.BLUETOOTH_SCAN,
// android.Manifest.permission.BLUETOOTH_ADVERTISE,
// android.Manifest.permission.BLUETOOTH_CONNECT,
// android.Manifest.permission.ACCESS_FINE_LOCATION,
// android.Manifest.permission.ACCESS_COARSE_LOCATION,
// android.Manifest.permission.BLUETOOTH
// };
}
initView();//初始化控件
}

View File

@ -7,9 +7,11 @@
*/
package com.ifish.activity;
import android.app.AlertDialog;
import android.app.Dialog;
import android.app.Fragment;
import android.content.Context;
import android.content.DialogInterface;
import android.content.Intent;
import android.graphics.Bitmap;
import android.net.Uri;
@ -29,6 +31,8 @@ import android.widget.ImageView;
import android.widget.RelativeLayout;
import android.widget.TextView;
import androidx.annotation.NonNull;
import com.bumptech.glide.Glide;
import com.ifish.basebean.BaseBean;
import com.ifish.basebean.EventBean;
@ -36,6 +40,8 @@ import com.ifish.basebean.LoadHeadImage;
import com.ifish.basebean.User;
import com.ifish.baseclass.BaseActivity;
import com.ifish.baseclass.UriForFile;
import com.ifish.fragment.DeviceFragment;
import com.ifish.permission.PermissionHelper;
import com.ifish.utils.AnimationUtil;
import com.ifish.utils.AppUtil;
import com.ifish.utils.Commons;
@ -96,7 +102,9 @@ public class MineActivity extends BaseActivity {
boolean userNameFlag = true;
private CountDownTimer LoadingTimer;
private SPUtil sp;
private PermissionHelper permissionHelper;
String[] permission;
@Override
protected void onCreate(Bundle savedInstanceState) {
// TODO Auto-generated method stub
@ -106,6 +114,8 @@ public class MineActivity extends BaseActivity {
sp = SPUtil.getInstance(this);
initView();
initListener();
permission = AppUtil.getImagePermissionList();
permissionHelper = new PermissionHelper(this, permission, 250);
}
private void initView() {
@ -280,6 +290,10 @@ public class MineActivity extends BaseActivity {
private void changeHead() {
if (!permissionHelper.checkSelfPermission(permission)) {
getPermission();
return;
}
gallery();
// final Dialog dialogHead = new Dialog(MineActivity.this, R.style.HOLOMyDialogs);
// dialogHead.show();
@ -704,5 +718,77 @@ public class MineActivity extends BaseActivity {
}
}
private void getPermission() {
permissionHelper.request(new PermissionHelper.PermissionCallback() {
@Override
public void onPermissionGranted() {
}
@Override
public void onIndividualPermissionGranted(String[] grantedPermission) {
AlertDialog.Builder dialog = new AlertDialog.Builder(MineActivity.this);
dialog.setCancelable(false);
dialog.setMessage("请先同意app获取权限");
dialog.setPositiveButton("确定", new DialogInterface.OnClickListener() {
@Override
public void onClick(
DialogInterface dialog,
int which) {
}
});
dialog.setNegativeButton("取消", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
}
});
dialog.show();
}
@Override
public void onPermissionDenied() {
AlertDialog.Builder dialog = new AlertDialog.Builder(MineActivity.this);
dialog.setCancelable(false);
dialog.setMessage("请先同意app获取权限");
dialog.setPositiveButton("确定", new DialogInterface.OnClickListener() {
@Override
public void onClick(
DialogInterface dialog,
int which) {
getPermission();
}
});
dialog.setNegativeButton("取消", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
}
});
dialog.show();
}
@Override
public void onPermissionDeniedBySystem() {
AlertDialog.Builder dialog = new AlertDialog.Builder(MineActivity.this);
dialog.setCancelable(false);
dialog.setTitle("温馨提示");
// dialog.setMessage("请到应用管理-爱鱼奇-应用权限页面开启权限后重新打开app");
dialog.setMessage("请到应用信息页面-权限管理-打开存储和相机权限");
dialog.setPositiveButton("去开启", (dialog1, which) -> {
AppUtil.toAuthority(MineActivity.this);
});
dialog.setNegativeButton("取消", (dialog12, which) -> {
});
dialog.show();
}
});
}
@Override
public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {
super.onRequestPermissionsResult(requestCode, permissions, grantResults);
if (permissionHelper != null) {
permissionHelper.onRequestPermissionsResult(requestCode, permissions, grantResults);
}
}
}

View File

@ -148,7 +148,8 @@ public class BottomChoiceDialog extends DialogFragment implements View.OnClickLi
lineAirKiss.setVisibility(View.VISIBLE);
lineAP.setVisibility(View.VISIBLE);
lineSmartConfig.setVisibility(View.GONE);
lineBle.setVisibility(View.VISIBLE);
// jiablue 暂时隐藏
lineBle.setVisibility(View.GONE);
switch (curConnectType) {
case SmartConfig:
// 处理SmartConfig逻辑

View File

@ -10,9 +10,9 @@ public class EventBean {
public String name;
public String value;
public int index = 0;
public static String BLUETOOTH_START_SCAN = "start_scan";
public static String BLUETOOTH_STOP_SCAN = "stop_scan";
// jiablue
// public static String BLUETOOTH_START_SCAN = "start_scan";
// public static String BLUETOOTH_STOP_SCAN = "stop_scan";
public static String TAB_INDEX = "tab_index";
public static String LINK_FINISH = "link_finish";
public static String CHANGE_DEVICE_NAME = "change_device_name";

View File

@ -133,8 +133,9 @@ public class BaseApplication extends MultiDexApplication {
if (count==0){
Activity activityName = ActivityManager.getInstance().lastActivity();
if (activityName!=null && activityName.toString().contains("MainTabActivity")){
EventBean eventBean = new EventBean(EventBean.BLUETOOTH_START_SCAN);
EventBus.getDefault().post(eventBean);
// jiablue
// EventBean eventBean = new EventBean(EventBean.BLUETOOTH_START_SCAN);
// EventBus.getDefault().post(eventBean);
}
}
count++;
@ -157,8 +158,9 @@ public class BaseApplication extends MultiDexApplication {
if (count==0){
Activity activityName = ActivityManager.getInstance().lastActivity();
if (activityName!=null && activityName.toString().contains("MainTabActivity")){
EventBean eventBean = new EventBean(EventBean.BLUETOOTH_STOP_SCAN);
EventBus.getDefault().post(eventBean);
// jiablue
// EventBean eventBean = new EventBean(EventBean.BLUETOOTH_STOP_SCAN);
// EventBus.getDefault().post(eventBean);
}
}
}

View File

@ -211,9 +211,9 @@ public class DeviceFragment extends BaseV4Fragment implements ObservableScrollVi
adInfos();
initInformation();
permission = AppUtil.getPermissionList();
permission = new String[]{android.Manifest.permission.ACCESS_FINE_LOCATION};
permissionHelper = new PermissionHelper(DeviceFragment.this, permission, 250);
initBooth();
// initBooth();
return v;
}
@ -271,8 +271,9 @@ public class DeviceFragment extends BaseV4Fragment implements ObservableScrollVi
public void onPermissionDeniedBySystem() {
AlertDialog.Builder dialog = new AlertDialog.Builder(getContext());
dialog.setCancelable(false);
dialog.setTitle("温馨提示");
// dialog.setMessage("请到应用管理-爱鱼奇-应用权限页面开启权限后重新打开app");
dialog.setMessage("请到应用信息页面-权限管理-打开位置和相机权限");
dialog.setMessage("请到应用信息页面-权限管理-打开位置权限,不然是发现不了附近的wifi的将无法进行配网连接您的智能设备");
dialog.setPositiveButton("去开启", (dialog1, which) -> {
// Intent mItent = new Intent(Settings.ACTION_SETTINGS);
// startActivity(mItent);
@ -1078,7 +1079,9 @@ public class DeviceFragment extends BaseV4Fragment implements ObservableScrollVi
lv_device.setAdapter(deviceAdapter);
lv_camera.setAdapter(cameraAdapter);
setUserInfo();
startDownTimer();
// jiablue
// startDownTimer();
}
@ -1111,10 +1114,10 @@ public class DeviceFragment extends BaseV4Fragment implements ObservableScrollVi
lv_device.setOnItemClickListener(new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
if (!permissionHelper.checkSelfPermission(permission)) {
getPermission();
return;
}
// if (!permissionHelper.checkSelfPermission(permission)) {
// getPermission();
// return;
// }
if (Commons.DEVICE == null || Commons.DEVICE.size() == 0) {
showDevice = PetDeviceGetDistinguish.getShowDevice(getContext());
showCamera = PetDeviceGetDistinguish.getFishCameras(Commons.CAMERA);
@ -1228,10 +1231,10 @@ public class DeviceFragment extends BaseV4Fragment implements ObservableScrollVi
lv_camera.setOnItemClickListener(new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
if (!permissionHelper.checkSelfPermission(permission)) {
getPermission();
return;
}
// if (!permissionHelper.checkSelfPermission(permission)) {
// getPermission();
// return;
// }
if (Commons.CAMERA == null) {
return;
}
@ -1536,9 +1539,9 @@ public class DeviceFragment extends BaseV4Fragment implements ObservableScrollVi
AnimationUtil.startAnimation(getActivity());
break;
case R.id.rl_adddevice:
EventBean eventBean = new EventBean(EventBean.BLUETOOTH_STOP_SCAN);
EventBus.getDefault().post(eventBean);
// jiablue
// EventBean eventBean = new EventBean(EventBean.BLUETOOTH_STOP_SCAN);
// EventBus.getDefault().post(eventBean);
if (!permissionHelper.checkSelfPermission(permission)) {
getPermission();
@ -1920,34 +1923,33 @@ public class DeviceFragment extends BaseV4Fragment implements ObservableScrollVi
private boolean isShowEd = false;
private int currentIndex = 0;
public void onEventMainThread(EventBean eventBean){
if (eventBean!= null){
if (EventBean.BLUETOOTH_START_SCAN.equals(eventBean.name)){
// ToastUtil.show(requireActivity(),isShowEd+"show");
if (!isShowEd){
// ToastUtil.show(requireActivity(),"re scaan");
initBooth();
}
}else if (EventBean.BLUETOOTH_STOP_SCAN.equals(eventBean.name)){
// ToastUtil.show(requireActivity(),"hide");
// L.i("jjia----------hide==");
if (!isShowIng){
currentDevice = null;
}
BleManager.getInstance().cancelScan();
}else if (EventBean.TAB_INDEX.equals(eventBean.name)){
currentIndex = eventBean.index;
L.i("jjia-----tab_index--"+eventBean.index);
if (currentIndex == 0){
startDownTimer();
}else {
oonPause();
}
}else if (EventBean.HEADER.equals(eventBean.name)){
Glide.with(getActivity()).load(eventBean.value).into(iv_head);
}
}
}
// jiablue
// public void onEventMainThread(EventBean eventBean){
// if (eventBean!= null){
// if (EventBean.BLUETOOTH_START_SCAN.equals(eventBean.name)){
// if (!isShowEd){
// initBooth();
// }
// }else if (EventBean.BLUETOOTH_STOP_SCAN.equals(eventBean.name)){
// if (!isShowIng){
// currentDevice = null;
// }
// BleManager.getInstance().cancelScan();
// }else
//
// if (EventBean.TAB_INDEX.equals(eventBean.name)){
// currentIndex = eventBean.index;
// L.i("jjia-----tab_index--"+eventBean.index);
// if (currentIndex == 0){
// startDownTimer();
// }else {
// oonPause();
// }
// }else if (EventBean.HEADER.equals(eventBean.name)){
// Glide.with(getActivity()).load(eventBean.value).into(iv_head);
// }
// }
// }
public void showDevice(){
// 检测页面

View File

@ -76,6 +76,13 @@ public class AppUtil {
intent.setData(Uri.fromParts("package", context.getPackageName(), null));
context.startActivity(intent);
}
private static void toPermission(Activity context) {
Intent intent =new Intent();
intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
intent.setAction("android.settings.APPLICATION_DETAILS_SETTINGS") ;
intent.setData(Uri.fromParts("package", context.getPackageName(), null));
context.startActivity(intent);
}
private static void gotoOppoPermission(ComponentActivity context) {
try {
@ -93,6 +100,22 @@ public class AppUtil {
toPermission(context);
}
}
private static void gotoOppoPermission(Activity context) {
try {
Intent intent =new Intent();
intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
intent.putExtra("packageName", context.getPackageName());
ComponentName comp =new ComponentName(
"com.color.safecenter",
"com.color.safecenter.permission.PermissionManagerActivity"
);
intent.setComponent(comp);
context.startActivity(intent);
} catch ( Exception e) {
toPermission(context);
}
}
private static void gotoMiuiPermission(ComponentActivity context) {
Intent i = new Intent("miui.intent.action.APP_PERM_EDITOR");
@ -109,6 +132,21 @@ public class AppUtil {
toPermission(context);
}
}
private static void gotoMiuiPermission(Activity context) {
Intent i = new Intent("miui.intent.action.APP_PERM_EDITOR");
ComponentName componentName =new ComponentName(
"com.miui.securitycenter",
"com.miui.permcenter.permissions.PermissionsEditorActivity"
);
i.setComponent(componentName);
i.putExtra("extra_pkgname", context.getPackageName());
try {
context.startActivity(i);
} catch ( Exception e) {
e.printStackTrace();
toPermission(context);
}
}
private static void gotoMeizuPermission(ComponentActivity context) {
Intent intent = new Intent("com.meizu.safe.security.SHOW_APPSEC");
@ -121,6 +159,17 @@ public class AppUtil {
toPermission(context);
}
}
private static void gotoMeizuPermission(Activity context) {
Intent intent = new Intent("com.meizu.safe.security.SHOW_APPSEC");
intent.addCategory(Intent.CATEGORY_DEFAULT);
intent.putExtra("packageName", context.getPackageName());
try {
context.startActivity(intent);
} catch (java.lang.Exception e) {
e.printStackTrace();
toPermission(context);
}
}
private static void gotoHuaweiPermission(ComponentActivity context) {
try {
@ -137,6 +186,21 @@ public class AppUtil {
toPermission(context);
}
}
private static void gotoHuaweiPermission(Activity context) {
try {
Intent intent = new Intent();
intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
ComponentName comp =new ComponentName(
"com.huawei.systemmanager",
"com.huawei.permissionmanager.ui.MainActivity"
) ;//华为权限管理
intent.setComponent(comp) ;
context.startActivity(intent);
} catch ( java.lang.Exception e) {
e.printStackTrace();
toPermission(context);
}
}
public static void toAuthority(ComponentActivity context) {
@ -155,6 +219,23 @@ public class AppUtil {
}
}
public static void toAuthority(Activity context) {
if (isBrandXiaoMi()){
gotoMiuiPermission(context);
}else if (isBrandMeizu()){
gotoMeizuPermission(context);
}else if (isBrandHuawei()){
gotoHuaweiPermission(context);
}else if(isBrandOnePlus()){
gotoOppoPermission(context);
}else if (isBrandOppo()){
gotoOppoPermission(context);
}else {
toPermission(context);
}
}
/**
* 检测手机是否支持4.0蓝牙
* @param context 上下文
@ -183,21 +264,46 @@ public class AppUtil {
List<String> perList = new ArrayList<>();
perList.add(android.Manifest.permission.CAMERA);
perList.add(android.Manifest.permission.ACCESS_FINE_LOCATION);
perList.add(android.Manifest.permission.READ_PHONE_STATE);
perList.add(android.Manifest.permission.BLUETOOTH);
perList.add(android.Manifest.permission.ACCESS_COARSE_LOCATION);
perList.add(android.Manifest.permission.ACCESS_FINE_LOCATION);
// perList.add(android.Manifest.permission.READ_PHONE_STATE);
// jiablue
// perList.add(android.Manifest.permission.BLUETOOTH);
// perList.add(android.Manifest.permission.ACCESS_COARSE_LOCATION);
// perList.add(android.Manifest.permission.ACCESS_FINE_LOCATION);
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.TIRAMISU) {
perList.add(android.Manifest.permission.READ_MEDIA_IMAGES);
perList.add(android.Manifest.permission.READ_MEDIA_VIDEO);
perList.add(android.Manifest.permission.BLUETOOTH_SCAN);
perList.add(android.Manifest.permission.BLUETOOTH_ADVERTISE);
perList.add(android.Manifest.permission.BLUETOOTH_CONNECT);
// jiablue
// perList.add(android.Manifest.permission.BLUETOOTH_SCAN);
// perList.add(android.Manifest.permission.BLUETOOTH_ADVERTISE);
// perList.add(android.Manifest.permission.BLUETOOTH_CONNECT);
} else if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.S){
// jiablue
// perList.add(android.Manifest.permission.BLUETOOTH_SCAN);
// perList.add(android.Manifest.permission.BLUETOOTH_ADVERTISE);
// perList.add(android.Manifest.permission.BLUETOOTH_CONNECT);
perList.add(android.Manifest.permission.READ_EXTERNAL_STORAGE);
perList.add(android.Manifest.permission.WRITE_EXTERNAL_STORAGE);
}else {
perList.add(android.Manifest.permission.READ_EXTERNAL_STORAGE);
perList.add(android.Manifest.permission.WRITE_EXTERNAL_STORAGE);
}
int size = perList.size();
String [] permissions = new String[size];
for (int i = 0;i<size;i++){
permissions[i] = perList.get(i);
}
return permissions;
}
public static String [] getImagePermissionList(){
List<String> perList = new ArrayList<>();
perList.add(android.Manifest.permission.CAMERA);
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.TIRAMISU) {
perList.add(android.Manifest.permission.READ_MEDIA_IMAGES);
perList.add(android.Manifest.permission.READ_MEDIA_VIDEO);
} else if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.S){
perList.add(android.Manifest.permission.BLUETOOTH_SCAN);
perList.add(android.Manifest.permission.BLUETOOTH_ADVERTISE);
perList.add(android.Manifest.permission.BLUETOOTH_CONNECT);
perList.add(android.Manifest.permission.READ_EXTERNAL_STORAGE);
perList.add(android.Manifest.permission.WRITE_EXTERNAL_STORAGE);
}else {