1、运行时权限
| 权限组 | 权限 |
| 日历:CALENDAR | android.permission.READ_CALENDAR |
| android.permission.WRITE_CALENDAR | |
| 相机:CAMERA | android.permission.CAMERA |
| 通讯录:CONTACTS | android.permission.READ_CONTACTS |
| android.permission.WRITE_CONTACTS | |
| android.permission.GET_ACCOUNTS | |
| 位置:LOCATION | android.permission.ACCESS_FINE_LOCATION |
| android.permission.ACCESS_COARSE_LOCATION | |
| 录音:MICROPHONE | android.permission.RECORD_AUDIO |
| 电话:PHONE | android.permission.READ_PHONE_STATE |
| android.permission.CALL_PHONE | |
| android.permission.READ_CALL_LOG | |
| android.permission.WRITE_CALL_LOG | |
| android.permission.ADD_VOICEMAIL | |
| android.permission.USE_SIP | |
| android.permission.PROCESS_OUTGOING_CALLS | |
| 传感器:SENSORS | android.permission.BODY_SENSORS |
| 信息:SMS | android.permission.SEND_SMS |
| android.permission.RECEIVE_SMS | |
| android.permission.READ_SMS | |
| android.permission.RECEIVE_WAP_PUSH | |
| android.permission.RECEIVE_MMS | |
| 存储:STORAGE | android.permission.READ_EXTERNAL_STORAGE |
| android.permission.WRITE_EXTERNAL_STORAGE |
(1)检查权限:checkSelfPermission(String permission)
(2)请求权限:requestPermissions(String[] permissions, int requestCode)
(3)请求结果:onRequestPermissionsResult(int requestCode, String[] permissions, int[] grantResults)
class HomeActivity : AppCompatActivity() {
private val mAllPermission = arrayOf(Manifest.permission.CAMERA,
Manifest.permission.READ_EXTERNAL_STORAGE, Manifest.permission.WRITE_EXTERNAL_STORAGE)//所有权限
private val REQUEST_CODE_PERMISSION = 1000
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_home)
checkPremission(mAllPermission)
}
//检查权限
private fun checkPremission(permission: Array<out String>){
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M){
val requestPermissionList = ArrayList<String>()
permission.forEach {
if (checkSelfPermission(it) != PackageManager.PERMISSION_GRANTED){
//需要请求的权限
requestPermissionList.add(it)
}
}
if (requestPermissionList.size > 0){
//申请权限
requestPermissions(requestPermissionList.toTypedArray(), REQUEST_CODE_PERMISSION)
}
}
}
override fun onRequestPermissionsResult(requestCode: Int, permissions: Array<out String>, grantResults: IntArray) {
//申请权限结果
if (requestCode == REQUEST_CODE_PERMISSION){
checkPremission(permissions)
}
super.onRequestPermissionsResult(requestCode, permissions, grantResults)
}
}
注:6.0~8.0权限组有一个权限授权通过,则整个权限组都被授权,8.0之后同组其他权限不会默认授权,但当这些同组其他权限调用申请授权时则会自动批准不会再弹框授权。
2、移除Apache Http相关库,如果需要使用HttpClient需要build.gradle文件android中声明依赖
android{
useLibrary 'org.apache.http.legacy'
}
本文详细介绍了Android系统中运行时权限的管理方法,包括不同权限组的具体权限介绍、权限检查及请求流程,并针对6.0至8.0版本权限组特性的变化进行了说明。
912

被折叠的 条评论
为什么被折叠?



