2023-03-21 17:06:56 +08:00

118 lines
4.2 KiB
Java

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();
}
}
}