在Android6.0以后很多权限都不能静态获取了,需要动态获取权限,都2021年了,应该没有版本还低于6.0吧,所以动态获取权限基本上是一个安卓程序员必须要掌握的本领了。下面就具体来看一下怎么做吧。
准备工作:新建一个空白的activity
1、在manifest里面添加静态权限
只有添加了静态权限之后才能动态获取权限,这里以常见的四个权限为例:
<!--存储权限-->
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<!--电话权限-->
<uses-permission android:name="android.permission.CALL_PHONE"/>
<!--相机权限-->
<uses-permission android:name="android.permission.CAMERA"/>
<!--定位权限-->
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
2、在activity中定义一个字符串数组来存放所需权限
// 要申请的权限
private val permissions = arrayOf(
Manifest.permission.WRITE_EXTERNAL_STORAGE, Manifest.permission.CALL_PHONE,
Manifest.permission.CAMERA, Manifest.permission.ACCESS_COARSE_LOCATION
)
3、判断每个权限的获取情况,未获取调用requestPermissions获取权限
val i = ContextCompat.checkSelfPermission(applicationContext, permissions[0])
val j = ContextCompat.checkSelfPermission(applicationContext, permissions[1])
val k = ContextCompat.checkSelfPermission(applicationContext, permissions[2])
val l = ContextCompat.checkSelfPermission(applicationContext, permissions[3])
if (i != PackageManager.PERMISSION_GRANTED || j != PackageManager.PERMISSION_GRANTED || k != PackageManager.PERMISSION_GRANTED ||
l != PackageManager.PERMISSION_GRANTED
) {
ActivityCompat.requestPermissions(this, permissions, 321)//调用方法获取权限
}
4、实现权限回调方法
override fun onRequestPermissionsResult(
requestCode: Int,
permissions: Array<out String>,
grantResults: IntArray
) {
super.onRequestPermissionsResult(requestCode, permissions, grantResults)
if (requestCode == 321) {
for (i in permissions.indices) {
if (grantResults[i] != PackageManager.PERMISSION_GRANTED) {
Log.d("zzp", "没有获取权限" + permissions[i])
} else {
Log.d("zzp", "获取权限成功" + permissions[i])
}
}
}
}
完整activity代码:
class MainActivity : AppCompatActivity() {
// 要申请的权限
private val permissions = arrayOf(
Manifest.permission.WRITE_EXTERNAL_STORAGE, Manifest.permission.CALL_PHONE,
Manifest.permission.CAMERA, Manifest.permission.ACCESS_COARSE_LOCATION
)
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
val i = ContextCompat.checkSelfPermission(applicationContext, permissions[0])
val j = ContextCompat.checkSelfPermission(applicationContext, permissions[1])
val k = ContextCompat.checkSelfPermission(applicationContext, permissions[2])
val l = ContextCompat.checkSelfPermission(applicationContext, permissions[3])
if (i != PackageManager.PERMISSION_GRANTED || j != PackageManager.PERMISSION_GRANTED || k != PackageManager.PERMISSION_GRANTED ||
l != PackageManager.PERMISSION_GRANTED
) {
ActivityCompat.requestPermissions(this, permissions, 321)
}
}
override fun onRequestPermissionsResult(
requestCode: Int,
permissions: Array<out String>,
grantResults: IntArray
) {
super.onRequestPermissionsResult(requestCode, permissions, grantResults)
if (requestCode == 321) {
for (i in permissions.indices) {
if (grantResults[i] != PackageManager.PERMISSION_GRANTED) {
Log.d("zzp", "没有获取权限" + permissions[i])
} else {
Log.d("zzp", "获取权限成功" + permissions[i])
}
}
}
}
}
运行结果截图
image.png下面附上权限列表:
Android各种权限列表
网友评论