下载逻辑,网络请求兼容android12

This commit is contained in:
Lihongda 2024-01-06 18:45:54 +08:00
parent e5275ac743
commit e53e0496d6
4 changed files with 71 additions and 9 deletions

View File

@ -140,9 +140,14 @@
android:maxSdkVersion="32" />
<uses-permission
android:name="android.permission.MANAGE_EXTERNAL_STORAGE"
android:maxSdkVersion="32" />
android:maxSdkVersion="32"
tools:ignore="ScopedStorage" />
<uses-permission android:name="android.permission.READ_MEDIA_IMAGES" />
<uses-permission android:name="android.permission.READ_MEDIA_VIDEO" />
<!--在SDCard中创建与删除文件权限-->
<uses-permission android:name="android.permission.MOUNT_UNMOUNT_FILESYSTEMS"
tools:ignore="ProtectedPermissions" />
<!-- <uses-permission android:name="android.permission.READ_MEDIA_AUDIO" />-->
<!-- ###################声明友盟分享SDK使用的相关权限###################### -->
@ -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">
<meta-data
android:name="android.max_aspect"

View File

@ -7,7 +7,8 @@
*/
package com.ifish.fragment;
import android.Manifest;
import static android.Manifest.permission.WRITE_EXTERNAL_STORAGE;
import android.app.Activity;
import android.app.AlertDialog;
import android.app.Dialog;
@ -45,6 +46,7 @@ import android.widget.TextView;
import android.widget.Toast;
import androidx.annotation.NonNull;
import androidx.core.app.ActivityCompat;
import com.bumptech.glide.Glide;
import com.ifish.activity.BindTwoDeviceActivity;
@ -124,6 +126,7 @@ import com.lidroid.xutils.exception.HttpException;
import com.lidroid.xutils.http.HttpHandler;
import com.lidroid.xutils.http.ResponseInfo;
import com.lidroid.xutils.http.callback.RequestCallBack;
import com.lidroid.xutils.util.LogUtils;
import com.p2p.core.MediaPlayer;
import com.p2p.core.P2PHandler;
import com.p2p.core.global.P2PConstants;
@ -165,7 +168,9 @@ public class DeviceFragment extends BaseV4Fragment implements ObservableScrollVi
private String isMustUpdate = "";
private String MustUpdate = "1";
private HttpUtils http = new HttpUtils();
private String apkPath = Environment.getExternalStorageDirectory() + "";//下载保存的地址
// private String apkPath = Environment.getExternalStorageDirectory() + "";//下载保存的地址
// private String apkPath = Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_DOWNLOADS) + "";//下载保存的地址
private String apkPath = Environment.getDataDirectory()+ "";//下载保存的地址
private File apkFile;//下载的文件
private Dialog apkDownloadDialog;
private NotificationManager mNotificationManager;
@ -189,7 +194,7 @@ public class DeviceFragment extends BaseV4Fragment implements ObservableScrollVi
private PermissionHelper permissionHelper;
String[] permission;
String[] permissionM = new String[]{android.Manifest.permission.CAMERA, android.Manifest.permission.ACCESS_FINE_LOCATION, android.Manifest.permission.READ_EXTERNAL_STORAGE, Manifest.permission.WRITE_EXTERNAL_STORAGE, android.Manifest.permission.READ_PHONE_STATE};
String[] permissionM = new String[]{android.Manifest.permission.CAMERA, android.Manifest.permission.ACCESS_FINE_LOCATION, android.Manifest.permission.READ_EXTERNAL_STORAGE, WRITE_EXTERNAL_STORAGE, android.Manifest.permission.READ_PHONE_STATE};
String[] permission13 = new String[]{android.Manifest.permission.CAMERA, android.Manifest.permission.ACCESS_FINE_LOCATION, android.Manifest.permission.READ_PHONE_STATE};
@ -432,7 +437,7 @@ public class DeviceFragment extends BaseV4Fragment implements ObservableScrollVi
int parseInt = Integer.parseInt(p2PVerifyCode1);
int parseInt2 = Integer.parseInt(p2PVerifyCode2);
int s1 = -1;
if(!TextUtils.isEmpty(sessionId)){
if (!TextUtils.isEmpty(sessionId)) {
s1 = Integer.parseInt(sessionId);
}
int s2 = -1;
@ -665,6 +670,25 @@ public class DeviceFragment extends BaseV4Fragment implements ObservableScrollVi
* 弹出下载进度条 开始下载apk
*/
private void showDownloadApkDialog() {
LogUtils.d("LHD 展示下载框");
//获取权限
boolean hasPermission = PermissionHelper.checkFilePermission(getActivity());
LogUtils.d("LHD 是否具有文件管理权限:" + hasPermission);
if (!hasPermission) {
if (Build.VERSION.SDK_INT >= 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);
//第二个参数需要与<provider>标签中的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() {

View File

@ -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 {

View File

@ -0,0 +1,4 @@
<?xml version="1.0" encoding="utf-8"?>
<network-security-config>
<base-config cleartextTrafficPermitted="true" />
</network-security-config>