在FragMent中使用EasyPermissions回调无效解决方案

在6.0以上的手机上Dangerous Permissions不仅要在manifests中注册,还要在使用的时候动态申请,在某些手机上申请权限竟然无效,最后发现这些系统自己定制了一个自己的安全中心,有时候使用原生方法申请权限无效怎么办?
那就请用EasyPermissions。
1、关于EasyPermissions
AndroidM(6.0)以上是动态权限,google官方推出了一个开源项目EasyPermissions 来方便集成动态权限的功能。
传送门:EasyPermissions
2 、使用EasyPermissions之前先了解Normal Permission与Dangerous Permissions。
【Normal Permission】:
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
INSTALL_SHORTCUT
INTERNET
KILL_BACKGROUND_PROCESSES
MODIFY_AUDIO_SETTINGS
NFC
READ_SYNC_SETTINGS
READ_SYNC_STATS
RECEIVE_BOOT_COMPLETED
REORDER_TASKS
REQUEST_INSTALL_PACKAGES
SET_ALARM
SET_TIME_ZONE
SET_WALLPAPER
SET_WALLPAPER_HINTS
TRANSMIT_IR
UNINSTALL_SHORTCUT
USE_FINGERPRINT
VIBRATE
WAKE_LOCK
WRITE_SYNC_SETTINGS
需要申请的权限
【Dangerous Permissions】:
permission:android.permission.WRITE_CONTACTS
permission:android.permission.GET_ACCOUNTS
permission:android.permission.READ_CONTACTS
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
permission:android.permission.READ_CALENDAR
permission:android.permission.WRITE_CALENDAR
permission:android.permission.CAMERA
permission:android.permission.BODY_SENSORS
permission:android.permission.ACCESS_FINE_LOCATION
permission:android.permission.ACCESS_COARSE_LOCATION
permission:android.permission.READ_EXTERNAL_STORAGE
permission:android.permission.WRITE_EXTERNAL_STORAGE
permission:android.permission.RECORD_AUDIO
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

从上面可以看出需要申请的权限挺多的。
3、EasyPermissions使用方法
引入,我使用的是这版
compile 'pub.devrel:easypermissions:0.4.2',
目前最新版是: compile 'pub.devrel:easypermissions:0.4.3'
第一步:添加接口EasyPermissions.PermissionCallbacks
示例:


Paste_Image.png

第二步:实现接口方法
实现系统申请权限回调方法

在FragMent中使用EasyPermissions回调无效解决方案_第1张图片
Paste_Image.png

EasyPermissions接口回调


在FragMent中使用EasyPermissions回调无效解决方案_第2张图片
Paste_Image.png

第三步:在合适的地方,开始申请权限,处理自己的业务逻辑
上下文可以this代替,这里实在Fragment中操作所以用getActivity


在FragMent中使用EasyPermissions回调无效解决方案_第3张图片
Paste_Image.png

第四步:处理回调
当权限申请成功时,可以看到LOG,都是自己申请的权限

在FragMent中使用EasyPermissions回调无效解决方案_第4张图片
Paste_Image.png
Paste_Image.png

当申请失败时

在FragMent中使用EasyPermissions回调无效解决方案_第5张图片
Paste_Image.png
Paste_Image.png

以上就是在Activity中处理权限申请的流程。

下面继续今天所说的在FragMent中解决EasyPermissions回调无效问题
在FragMent中同样的写法,回调完全无效,其实是回调进了错误的地方,使用getActivity()进入了父类的方法,回调进了父类中去。
有兴趣的朋友可以在FragMent父类Activity中实验一下,回调完全没问题。笔者已经测试通过。
那在FragMent中应该怎样写呢?
这个是关键,就修改这个,把上下文getActivity换成FragMent,亲测无误

在FragMent中使用EasyPermissions回调无效解决方案_第6张图片
Paste_Image.png

到此,从EasyPermissions的使用方法,和EasyPermissions在FragMent中遇到的问题全部解决。
觉得文章对您有帮助,求个赞~~~~~~

在FragMent中使用EasyPermissions回调无效解决方案_第7张图片
Paste_Image.png

你可能感兴趣的:(在FragMent中使用EasyPermissions回调无效解决方案)