您的位置:首页 > 移动开发 > Android开发

Android6.0新特性:权限管理

2016-10-25 14:41 197 查看
最近不是很忙,但是总不能虚度浪费时间,技术还是要提升的,曾在技术交流群中遇到有人因为没有对android 6.0系统权限做处理,导致程序一直出错。Google 2015年的 I/O大会上已经正式发布了android 6.0,虽然目前android 6.0使用者仅2.7%,但还是有学习的必要的。好了废话就不多说了。

android 6.0权限基本知识,以下是需要单独申请的权限,共分为9组,每组只要有一个权限申请成功了,就默认整组权限都可以使用了。
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[/code]

以下是普通权限,只需要在AndroidManifest.xml中申请即可。
        android.permission.ACCESS_LOCATION_EXTRA_COMMANDS
android.permission.ACCESS_NETWORK_STATE
android.permission.ACCESS_NOTIFICATION_POLICY
android.permission.ACCESS_WIFI_STATE
android.permission.ACCESS_WIMAX_STATE
android.permission.BLUETOOTH
android.permission.BLUETOOTH_ADMIN
android.permission.BROADCAST_STICKY
android.permission.CHANGE_NETWORK_STATE
android.permission.CHANGE_WIFI_MULTICAST_STATE
android.permission.CHANGE_WIFI_STATE
android.permission.CHANGE_WIMAX_STATE
android.permission.DISABLE_KEYGUARD
android.permission.EXPAND_STATUS_BAR
android.permission.FLASHLIGHT
android.permission.GET_ACCOUNTS
android.permission.GET_PACKAGE_SIZE
android.permission.INTERNET
android.permission.KILL_BACKGROUND_PROCESSES
android.permission.MODIFY_AUDIO_SETTINGS
android.permission.NFC
android.permission.READ_SYNC_SETTINGS
android.permission.READ_SYNC_STATS
android.permission.RECEIVE_BOOT_COMPLETED
android.permission.REORDER_TASKS
android.permission.REQUEST_INSTALL_PACKAGES
android.permission.SET_TIME_ZONE
android.permission.SET_WALLPAPER
android.permission.SET_WALLPAPER_HINTS
android.permission.SUBSCRIBED_FEEDS_READ
android.permission.TRANSMIT_IR
android.permission.USE_FINGERPRINT
android.permission.VIBRATE
android.permission.WAKE_LOCK
android.permission.WRITE_SYNC_SETTINGS
com.android.alarm.permission.SET_ALARM
com.android.launcher.permission.INSTALL_SHORTCUT
com.android.launcher.permission.UNINSTALL_SHORTCUT[/code]

申请步骤

1、将targetSdkVersion设置为23,注意:如果你将targetSdkVersion设置为>=23,则必须动态申请权限,如果你暂时不打算支持动态申请权限,你的targetSdkVersion最大值只能设置为22。
2、在AndroidManifest.xml中申请你需要的权限,包括普通权限和需要申请的特殊权限。(之所以还需要在AndroidManifest.xml中添加你需要申请的特殊权限是为兼容android
6.0 以下的系统)
3、开始申请权限,分为3部分(下面涉及到的方法我都封装起来放在BaseActivity中)

(1)使用checkPermission方法检查权限,返回值true表示已申请相关权限,false表示没有申请相关权限

(2)使用requestPermission方法申请权限

(3)重写onRequestPermissionsResult方法对相应权限处理(申请权限完成时调用此方法回调处理)

BaseActivity

/**
* Description:BaseActivity
* Created by Anna on 2016/10/25.
*/
public class BaseActivity extends AppCompatActivity {
@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
}
/**
* 为子类提供一个检查权限的方法
* @param permissions
* @return
*/
public boolean checkPermission(String ...permissions){
for(String permission : permissions){
if(ContextCompat.checkSelfPermission(this,permission) != PackageManager.PERMISSION_GRANTED){
return false;
}
}
return true;
}
/**
* 为子类提供一个权限请求方法
* @param requestCode
* @param permissions
*/
public void requestPermission(int requestCode,String ...permissions){
ActivityCompat.requestPermissions(this,permissions,requestCode);
}
@Override
public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {
super.onRequestPermissionsResult(requestCode, permissions, grantResults);
switch (requestCode){
case Constants.WRITE_EXTERNAL_STORAGE:
doSDCardPermission();
break;
case Constants.CALL_PHONE:
doCallPermission();
break;
}
}
/**
* 默认写sdcard权限处理
*/
public void doSDCardPermission(){

}
/**
* 默认打电话权限处理
*/
public void doCallPermission(){

}
}


使用时候只需要写一个子Activity继承BaseActivity,直接使用父类中checkPermission和requestPermission方法,重写父类中的doCallPermission方法处理拨打电话逻辑(重写doSDCardPermission方法进行文件读写操作,例如:下载一张图片),此处我使用以上两种作为举例,具体使用根据自己项目需要延伸扩展。
(首次写博客,缺乏经验,不足之处,还望多多指导,相互交流,相互学习)
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息