赞
踩
先上图:
对于一些危险权限在AndroidManifest清单文件中申请之后,还需要得到用户的许可并打开,才算是真正的开启了这个权限。所以可以使用动态申请权限,对于某个功能,如果需要开启某个权限,在用户使用它之前,弹窗提示用户是否要开启这个权限。
动态申请权限大致可以分为四步:
下面以申请写入外存权限为例。
在AndroidManifest清单文件中声明要开启的权限。
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
检查权限是否开启,如果开启了则不需要再执行下面的步骤,直接使用功能即可。如果没有开启,那么就申请开启权限。
if (ContextCompat.checkSelfPermission(this, Manifest.permission.WRITE_EXTERNAL_STORAGE)
!= PackageManager.PERMISSION_GRANTED) {
ActivityCompat.requestPermissions(this, new String[]{Manifest.permission.WRITE_EXTERNAL_STORAGE}, REQUEST_CODE);
}
接受申请开启权限的结果。
public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {
super.onRequestPermissionsResult(requestCode, permissions, grantResults);
if (requestCode == REQUEST_CODE) {
if (grantResults.length != 0 && grantResults[0] == PackageManager.PERMISSION_GRANTED) {
Toast.makeText(this, "权限开启成功", Toast.LENGTH_LONG).show();
} else {
Toast.makeText(this, "权限开启失败", Toast.LENGTH_LONG).show();
}
}
}
完整Java代码:
public class MainActivity extends AppCompatActivity { final int REQUEST_CODE = 1; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); if (ContextCompat.checkSelfPermission(this, Manifest.permission.WRITE_EXTERNAL_STORAGE) != PackageManager.PERMISSION_GRANTED) { ActivityCompat.requestPermissions(this, new String[]{Manifest.permission.WRITE_EXTERNAL_STORAGE}, REQUEST_CODE); } } @Override public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) { super.onRequestPermissionsResult(requestCode, permissions, grantResults); if (requestCode == REQUEST_CODE) { if (grantResults.length != 0 && grantResults[0] == PackageManager.PERMISSION_GRANTED) { Toast.makeText(this, "权限开启成功", Toast.LENGTH_LONG).show(); } else { Toast.makeText(this, "权限开启失败", Toast.LENGTH_LONG).show(); } } } }
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。