package com.navinfo.collect; import android.Manifest; import android.content.DialogInterface; import android.content.Intent; import android.content.pm.PackageManager; import android.os.Build; import android.os.Bundle; import android.os.Environment; import android.provider.Settings; import androidx.annotation.NonNull; import androidx.annotation.Nullable; import androidx.appcompat.app.AlertDialog; import androidx.appcompat.app.AppCompatActivity; import androidx.core.app.ActivityCompat; import androidx.core.content.PermissionChecker; import com.baidu.ai.edge.core.base.Consts; /** * Created by linyiran on 6/16/22. */ public abstract class BaseActivity extends AppCompatActivity { private static final int REQUEST_PERMISSION = 1; protected boolean allPermissionsGranted; @Override protected void onCreate(@Nullable Bundle savedInstanceState) { super.onCreate(savedInstanceState); setLayout(); requestPermission(); onActivityCreated(savedInstanceState); } protected abstract void setLayout(); protected abstract void onActivityCreated(Bundle savedInstanceState); private void requestPermission() { if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) { String[] permissions = new String[]{ Manifest.permission.WRITE_EXTERNAL_STORAGE, Manifest.permission.INTERNET, Manifest.permission.ACCESS_NETWORK_STATE, Manifest.permission.READ_PHONE_STATE, Manifest.permission.CAMERA }; allPermissionsGranted = true; for (String perm : permissions) { if ((PermissionChecker.checkSelfPermission(this, perm) != PermissionChecker.PERMISSION_GRANTED)) { allPermissionsGranted = false; break; } } if (!allPermissionsGranted) { ActivityCompat.requestPermissions(BaseActivity.this, permissions, REQUEST_PERMISSION); } else { requestAllFilesAccess(); } } else { allPermissionsGranted = true; } } @Override public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) { if (requestCode == REQUEST_PERMISSION) { allPermissionsGranted = true; for (int grantRes : grantResults) { if (grantRes != PackageManager.PERMISSION_GRANTED) { allPermissionsGranted = false; break; } } if (allPermissionsGranted) { requestAllFilesAccess(); } } super.onRequestPermissionsResult(requestCode, permissions, grantResults); } /** * Android 11 跳转到设置获取SD卡根目录写入权限 */ private void requestAllFilesAccess() { if (!Consts.AUTH_REQUIRE_SDCARD) { return; } if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.R && !Environment.isExternalStorageManager()) { allPermissionsGranted = false; AlertDialog.Builder alertBuilder = new AlertDialog.Builder(BaseActivity.this, androidx.appcompat.R.style.Theme_AppCompat_Light_Dialog_Alert); alertBuilder.setMessage("需授权访问SD卡文件"); alertBuilder.setCancelable(false); alertBuilder.setPositiveButton("去设置", new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialog, int which) { Intent intent = new Intent(Settings.ACTION_MANAGE_ALL_FILES_ACCESS_PERMISSION); intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); startActivity(intent); } }); alertBuilder.setNegativeButton("取消", new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialog, int which) { dialog.dismiss(); } }); alertBuilder.show(); } } }