安卓6.0多了新的特性,也就是打开app时,经常会提醒你是否允许xx应用获取xx权限,这就是新特性的表现。
也就是说,有的权限,光是在manifest里获取还不够,还要让用户手动允许才能获得这项权限
如果只在manifest里面写,而不让用户手动获取,则会崩溃并报类似
Need ACCESS_COARSE_LOCATION or ACCESS_FINE_LOCATION permission
的错
目前有以下这些权限需要手动获取
group:android.permission-group.CONTACTS
permission:android.permission.WRITE_CONTACTS
permission:android.permission.GET_ACCOUNTS
permission:android.permission.READ_CONTACTS
group:android.permission-group.PHONE
permission:android.permission.READ_CALL_LOG
permission:android.permission.READ_PHONE_STATE
permission:android.permission.CALL_PHONE
permission:android.permission.WRITE_CALL_LOG
permission:android.permission.USE_SIP
permission:android.permission.PROCESS_OUTGOING_CALLS
permission:com.android.voicemail.permission.ADD_VOICEMAIL
group:android.permission-group.CALENDAR
permission:android.permission.READ_CALENDAR
permission:android.permission.WRITE_CALENDAR
group:android.permission-group.CAMERA
permission:android.permission.CAMERA
group:android.permission-group.SENSORS
permission:android.permission.BODY_SENSORS
group:android.permission-group.LOCATION
permission:android.permission.ACCESS_FINE_LOCATION
permission:android.permission.ACCESS_COARSE_LOCATION
group:android.permission-group.STORAGE
permission:android.permission.READ_EXTERNAL_STORAGE
permission:android.permission.WRITE_EXTERNAL_STORAGE
group:android.permission-group.MICROPHONE
permission:android.permission.RECORD_AUDIO
group:android.permission-group.SMS
permission:android.permission.READ_SMS
permission:android.permission.RECEIVE_WAP_PUSH
permission:android.permission.RECEIVE_MMS
permission:android.permission.RECEIVE_SMS
permission:android.permission.SEND_SMS
permission:android.permission.READ_CELL_BROADCASTS
获取的代码如下
在activity中
if (ActivityCompat.checkSelfPermission(this, Manifest.permission.RECORD_AUDIO)!=PackageManager.PERMISSION_GRANTED)
// 检测是否已被允许这个权限
{ ActivityCompat.requestPermissions(this,new String[]{Manifest.permission.RECORD_AUDIO},1);}//没有,则让用户获取
在fragment中
注意fragment不要写成和activity一样,否则将会无法获取回调函数的结果if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M && ActivityCompat.checkSelfPermission(getActivity(), Manifest.permission.ACCESS_COARSE_LOCATION)!=PackageManager.PERMISSION_GRANTED) // 检测是否已被允许这个权限 { requestPermissions(new String[]{Manifest.permission.ACCESS_COARSE_LOCATION},1);//没有,则让用户获取 }