Android6.0运行时权限浅析

xiaoxiao2021-02-28  150

Android在6.0之后加入了运行时权限,权限分为一般权限和危险权限,Android系统总共有百余种权限,那么怎么区分哪些是一般权限哪些是危险权限呢,其实危险权限并不是很多,总共9组24个,这里,这里是按组分的,只要申请了某一组的其中一个权限,那么就拥有了整组的权限。

一:哪些是危险权限

下图是所有的危险权限,共9组24个

二:具体使用

2.1、检查权限

int result = ActivityCompat.checkSelfPermission(this, Manifest.permission.WRITE_EXTERNAL_STORAGE);

这里有两个参数,第一个是Context没什么可说的,第二个表示具体哪一个权限,并且有一个int型的返回值,返回值有两个结果,一个是PackageManager.PERMISSION_DENIED表示权限被拒绝,另一个是PackageManager.PERMISSION_GRANTED,表示用户允许了你申请该权限。

2.2、申请权限

ActivityCompat.requestPermissions(this, permissions, REQUESTCODE);

这里有三个参数,第一个Context,第二个是一个String类型的数组,里面放具体你要申请的权限,第三个是请求码,只要是一个唯一值就可以了。

2.3、处理申请权限的回调

@Override public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) { super.onRequestPermissionsResult(requestCode, permissions, grantResults); if (grantResults[0] != PermissionChecker.PERMISSION_GRANTED) { Toast.makeText(this, "未申请权限将会影响您的正常使用", Toast.LENGTH_SHORT).show(); } else { Toast.makeText(this, "授权成功", Toast.LENGTH_SHORT).show(); } } }

三:完整例子

public class SplashActivity extends AppCompatActivity { String[] permissions = {Manifest.permission.WRITE_EXTERNAL_STORAGE,Manifest.permission.READ_EXTERNAL_STORAGE}; private static final int REQUESTCODE = 1; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_splash); applyPermission(); } private void EnterHome() { startActivity(new Intent(this, HomeActivity.class)); finish(); } /** * 检测及申请权限 */ private void applyPermission() { int result = ActivityCompat.checkSelfPermission(this, Manifest.permission.WRITE_EXTERNAL_STORAGE); if (result != PermissionChecker.PERMISSION_GRANTED) { //没有权限则需要申请权限,弹出对话框 ActivityCompat.requestPermissions(this, permissions, REQUESTCODE); } } /** * 进入主页 * * @param view */ public void goHome(View view) { EnterHome(); } @Override public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) { super.onRequestPermissionsResult(requestCode, permissions, grantResults); if (grantResults[0] != PermissionChecker.PERMISSION_GRANTED) { Toast.makeText(this, "未申请权限将会影响您的正常使用", Toast.LENGTH_SHORT).show(); } else { Toast.makeText(this, "授权成功", Toast.LENGTH_SHORT).show(); } } }
转载请注明原文地址: https://www.6miu.com/read-17829.html

最新回复(0)