diff --git a/iFish7/src/main/AndroidManifest.xml b/iFish7/src/main/AndroidManifest.xml index dbd46f869..7694f1aaa 100644 --- a/iFish7/src/main/AndroidManifest.xml +++ b/iFish7/src/main/AndroidManifest.xml @@ -140,9 +140,14 @@ android:maxSdkVersion="32" /> + android:maxSdkVersion="32" + tools:ignore="ScopedStorage" /> + + + @@ -225,6 +230,8 @@ android:label="@string/app_name" android:theme="@style/MyAppTheme" android:usesCleartextTraffic="true" + android:requestLegacyExternalStorage="true" + android:networkSecurityConfig="@xml/network_security_config" tools:replace="android:icon,android:theme,android:allowBackup"> = Build.VERSION_CODES.TIRAMISU) { + LogUtils.d("LHD android 13不需要请求"); + } else if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.R) { + //请求文件系统权限 + LogUtils.d("LHD 请求MANAGE_EXTERNAL_STORAGE权限"); + Intent intent = new Intent(Settings.ACTION_MANAGE_APP_ALL_FILES_ACCESS_PERMISSION); + intent.addCategory("android.intent.category.DEFAULT"); + intent.setData(Uri.parse(String.format("package:%s", getActivity().getApplicationContext().getPackageName()))); + startActivityForResult(intent, 301); + } else { + ActivityCompat.requestPermissions(getActivity(), new String[]{WRITE_EXTERNAL_STORAGE}, 302); + } + } + apkDownloadDialog = new Dialog(getActivity(), R.style.DefautDialogs); apkDownloadDialog.setCancelable(false); apkDownloadDialog.show(); @@ -833,7 +857,7 @@ public class DeviceFragment extends BaseV4Fragment implements ObservableScrollVi if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) { intent.setFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION); //第二个参数需要与标签中的android:authorities属性相同 - uri = UriForFile.getUriForFile(getActivity(),apkFile); + uri = UriForFile.getUriForFile(getActivity(), apkFile); } else { intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK); uri = UriForFile.getUriForFile(getContext(), apkFile); @@ -845,8 +869,20 @@ public class DeviceFragment extends BaseV4Fragment implements ObservableScrollVi @Override public void onActivityResult(int requestCode, int resultCode, Intent data) { super.onActivityResult(requestCode, resultCode, data); - if (resultCode == Activity.RESULT_OK && requestCode == 300) { + + if (requestCode == 300 && resultCode == Activity.RESULT_OK) { installApk(); + } else if (requestCode == 301) { + if (PermissionHelper.checkFilePermission(getActivity())) { + showDownloadApkDialog(); + } else { + if (getActivity() != null) { + if (apkDownloadDialog != null) { + apkDownloadDialog.dismiss(); + } + ToastUtil.show(getActivity(), "必须允许文件管理权限才能下载更新APP,请前往APP管理界面手动授权"); + } + } } } @@ -1125,7 +1161,7 @@ public class DeviceFragment extends BaseV4Fragment implements ObservableScrollVi i.setClass(getActivity(), MainSeven_2F_ControlActivity.class); } else if (Device.TYPE_3F.equals(type)) { i.setClass(getActivity(), MainFour_3F_ControlActivity.class); - } else if (Device.TYPE_4F.equals(type) || Device.TYPE_5F.equals(type)){ + } else if (Device.TYPE_4F.equals(type) || Device.TYPE_5F.equals(type)) { i.setClass(getActivity(), MainSix_4F_ControlActivity.class); } else { if (controlAmount == null) {//如果控制器返回空 则默认给三控的页面 @@ -1693,7 +1729,7 @@ public class DeviceFragment extends BaseV4Fragment implements ObservableScrollVi firstResult = firstResult + HttpManager.PAGESIZE; } - },1000); + }, 1000); } private void getInformations() { diff --git a/iFish7/src/main/java/com/ifish/permission/PermissionHelper.java b/iFish7/src/main/java/com/ifish/permission/PermissionHelper.java index f39f04ace..4d9c82356 100644 --- a/iFish7/src/main/java/com/ifish/permission/PermissionHelper.java +++ b/iFish7/src/main/java/com/ifish/permission/PermissionHelper.java @@ -1,6 +1,9 @@ package com.ifish.permission; +import static android.Manifest.permission.READ_EXTERNAL_STORAGE; +import static android.Manifest.permission.WRITE_EXTERNAL_STORAGE; +import static android.os.Build.VERSION.SDK_INT; import static androidx.core.app.ActivityCompat.shouldShowRequestPermissionRationale; import android.app.Activity; @@ -9,6 +12,8 @@ import android.content.Intent; import android.content.pm.PackageInfo; import android.content.pm.PackageManager; import android.net.Uri; +import android.os.Build; +import android.os.Environment; import android.provider.Settings; import androidx.annotation.NonNull; @@ -198,6 +203,16 @@ public class PermissionHelper { return shouldShowRequestPermissionRationale(act, permissions); } + public static boolean checkFilePermission(Activity act) { + if (SDK_INT >= Build.VERSION_CODES.R) { + return Environment.isExternalStorageManager(); + } else { + int result = ContextCompat.checkSelfPermission(act, READ_EXTERNAL_STORAGE); + int result1 = ContextCompat.checkSelfPermission(act, WRITE_EXTERNAL_STORAGE); + return result == PackageManager.PERMISSION_GRANTED && result1 == PackageManager.PERMISSION_GRANTED; + } + } + //=================== private boolean hasPermissionInManifest(String permission) { try { diff --git a/iFish7/src/main/res/xml/network_security_config.xml b/iFish7/src/main/res/xml/network_security_config.xml new file mode 100644 index 000000000..dca93c079 --- /dev/null +++ b/iFish7/src/main/res/xml/network_security_config.xml @@ -0,0 +1,4 @@ + + + + \ No newline at end of file