118 lines
4.2 KiB
Java
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();
|
|
}
|
|
}
|
|
}
|