权限问题一直是Android开发人员很头疼的问题,比如经常会碰到朋友抱怨,这个录音权限判断不了或者是判断了没效果,只能另辟蹊径。其实我们开发过程中很容易碰到这些问题,但是这些问题都很零碎,所以也引不起大的注意,但是却容易发生一些意外状况.当然今天的主题是M版本的权限问题,这个问题阻拦了很多应用SDK升级23之路。就我自己的研究来看,我有好几个朋友未升级的理由都是,M版本的权限检查太恶心了,我们里面有那么多地方用到,改的很费劲,那么究竟如何呢?大家如果可以翻墙的话,可以去看看http://developer.android.com/intl/zh-cn/about/versions/marshmallow/android-6.0-changes.html这篇文档,里面着重提到了权限检查的问题。
我是插入的:推荐权限检查第三方https://github.com/jsmeli/PermissionCheck ,望多多支持,感激不尽
一个Android应用默认情况下是不拥有任何权限的, 这即是说, 在默认情况下, 一个应用是没有权利去进行一些可能会造成不好影响的操作的. 这些不好的影响可能是对其它应用,操作系统,或者是用户。
ACCESS_LOCATION_EXTRA_COMMANDS
ACCESS_NETWORK_STATE
ACCESS_NOTIFICATION_POLICY
ACCESS_WIFI_STATE
BLUETOOTH
BLUETOOTH_ADMIN
BROADCAST_STICKY
CHANGE_NETWORK_STATE
CHANGE_WIFI_MULTICAST_STATE
CHANGE_WIFI_STATE
DISABLE_KEYGUARD
EXPAND_STATUS_BAR
GET_PACKAGE_SIZE
INTERNET
KILL_BACKGROUND_PROCESSES
MODIFY_AUDIO_SETTINGS
NFC
READ_SYNC_SETTINGS
READ_SYNC_STATS
RECEIVE_BOOT_COMPLETED
REORDER_TASKS
REQUEST_INSTALL_PACKAGES
SET_TIME_ZONE
SET_WALLPAPER
SET_WALLPAPER_HINTS
TRANSMIT_IR
USE_FINGERPRINT
VIBRATE
WAKE_LOCK
WRITE_SYNC_SETTINGS
SET_ALARM
INSTALL_SHORTCUT
UNINSTALL_SHORTCUT
需要进行检查的组(Dangerous权限)
- CALENDAR
- CAMERA
- CONTACTS
- LOCATION
- MICROPHONE
- PHONE
- SENSORS
- SMS
- STORAGE
//动态获取权限 if (checkSelfPermission(Manifest.permission.READ_CONTACTS) != PackageManager .PERMISSION_GRANTED) { if (!ActivityCompat.shouldShowRequestPermissionRationale(context, Manifest.permission.READ_CONTACTS)) { //这种情况是该用户已经选择了不再提示的选项,需要手动给该用户做提示操作 } else { ActivityCompat.requestPermissions(this, new String[]{Manifest.permission .READ_CONTACTS}, PERMISSION_REQUEST); } } else { //获取通讯录信息 Intent intent = new Intent(Intent.ACTION_PICK, ContactsContract.Contacts.CONTENT_URI); startActivityForResult(intent, CHOOSE_CONTACT); }
@Override public void onRequestPermissionsResult(int requestCode, String[] permissions, int[] grantResults) { super.onRequestPermissionsResult(requestCode, permissions, grantResults); switch (requestCode) { case PERMISSION_REQUEST: if (grantResults.length > 0 && grantResults[0] == PackageManager .PERMISSION_GRANTED) { //获取通讯录信息 Intent intent = new Intent(Intent.ACTION_PICK, ContactsContract.Contacts .CONTENT_URI); startActivityForResult(intent, CHOOSE_CONTACT); } break; } }
checkSelfPermission(Manifest.permission.READ_CONTACTS)
//动态获取权限 if(Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) { if (checkSelfPermission(Manifest.permission.READ_CONTACTS) != PackageManager .PERMISSION_GRANTED) { if (!ActivityCompat.shouldShowRequestPermissionRationale(context, Manifest.permission.READ_CONTACTS)) { //这种情况是该用户已经选择了不再提示的选项,需要手动给该用户做提示操作 } else { ActivityCompat.requestPermissions(this, new String[]{Manifest.permission .READ_CONTACTS}, PERMISSION_REQUEST); } } else { //获取通讯录信息 Intent intent = new Intent(Intent.ACTION_PICK, ContactsContract.Contacts.CONTENT_URI); startActivityForResult(intent, CHOOSE_CONTACT); } }
Intent intent = new Intent(Settings.ACTION_APPLICATION_SETTINGS); startActivity(intent);
1万+

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



