当前位置: 首页 > news >正文

上海做网站 公司免费的seo优化

上海做网站 公司,免费的seo优化,教育机构的域名,张家口外贸网站建设官网 项目地址:Github博文地址:一句代码搞定权限请求,从未如此简单 框架亮点 一马当先:首款适配 Android 13 的权限请求框架简洁易用:采用链式调用的方式,使用只需一句代码体积感人:功能在同类…
官网
  • 项目地址:Github
  • 博文地址:一句代码搞定权限请求,从未如此简单


框架亮点
  • 一马当先:首款适配 Android 13 的权限请求框架
  • 简洁易用:采用链式调用的方式,使用只需一句代码
  • 体积感人:功能在同类框架中是最全的,但是框架体积是垫底的
  • 支持全面:首款也是唯一一款适配所有 Android 版本的权限请求框架
  • 技术难题攻坚:首款解决权限申请在 Android 12 出现系统内存泄漏的框架
  • 适配极端情况:无论在多么极端恶劣的环境下申请权限,框架依然坚挺
  • 向下兼容属性:新权限在旧系统可以正常申请,框架会做自动适配,无需调用者适配
  • 自动检测错误:如果出现错误框架会主动抛出异常给调用者(仅在 Debug 下判断,把 Bug 扼杀在摇篮中)
集成步骤
  • 如果你的项目 Gradle 配置是在 7.0 以下,需要在 build.gradle 文件中加入
allprojects {repositories {// JitPack 远程仓库:https://jitpack.iomaven { url 'https://jitpack.io' }}
}
  • 如果你的 Gradle 配置是 7.0 及以上,则需要在 settings.gradle 文件中加入
dependencyResolutionManagement {repositories {// JitPack 远程仓库:https://jitpack.iomaven { url 'https://jitpack.io' }}
}
  • 配置完远程仓库后,在项目 app 模块下的 build.gradle 文件中加入远程依赖
android {// 支持 JDK 1.8 及以上compileOptions {targetCompatibility JavaVersion.VERSION_1_8sourceCompatibility JavaVersion.VERSION_1_8}
}dependencies {// 权限请求框架:https://github.com/getActivity/XXPermissionsimplementation 'com.github.getActivity:XXPermissions:18.3'
}
AndroidX 兼容
  • 如果项目是基于 AndroidX 包,请在项目 gradle.properties 文件中加入
# 表示将第三方库迁移到 AndroidX
android.enableJetifier = true
  • 如果项目是基于 Support 包则不需要加入此配置
分区存储
  • 如果项目已经适配了 Android 10 分区存储特性,请在 AndroidManifest.xml 中加入
<manifest><application><!-- 告知 XXPermissions 当前项目已经适配了分区存储特性 --><meta-dataandroid:name="ScopedStorage"android:value="true" /></application></manifest>
  • 如果当前项目没有适配这特性,那么这一步骤可以忽略
  • 需要注意的是:这个选项是框架用于判断当前项目是否适配了分区存储,需要注意的是,如果你的项目已经适配了分区存储特性,可以使用 READ_EXTERNAL_STORAGE、WRITE_EXTERNAL_STORAGE 来申请权限,如果你的项目还没有适配分区特性,就算申请了 READ_EXTERNAL_STORAGE、WRITE_EXTERNAL_STORAGE 权限也会导致无法正常读取外部存储上面的文件,如果你的项目没有适配分区存储,请使用 MANAGE_EXTERNAL_STORAGE 来申请权限,这样才能正常读取外部存储上面的文件,你如果想了解更多关于 Android 10 分区存储的特性,可以点击此处查看和学习。
一句代码搞定权限请求,从未如此简单
  • Java 用法示例
XXPermissions.with(this)// 申请单个权限.permission(Permission.RECORD_AUDIO)// 申请多个权限.permission(Permission.Group.CALENDAR)// 设置权限请求拦截器(局部设置)//.interceptor(new PermissionInterceptor())// 设置不触发错误检测机制(局部设置)//.unchecked().request(new OnPermissionCallback() {@Overridepublic void onGranted(@NonNull List<String> permissions, boolean allGranted) {if (!allGranted) {toast("获取部分权限成功,但部分权限未正常授予");return;}toast("获取录音和日历权限成功");}@Overridepublic void onDenied(@NonNull List<String> permissions, boolean doNotAskAgain) {if (doNotAskAgain) {toast("被永久拒绝授权,请手动授予录音和日历权限");// 如果是被永久拒绝就跳转到应用权限系统设置页面XXPermissions.startPermissionActivity(context, permissions);} else {toast("获取录音和日历权限失败");}}});
  • Kotlin 用法示例
XXPermissions.with(this)// 申请单个权限.permission(Permission.RECORD_AUDIO)// 申请多个权限.permission(Permission.Group.CALENDAR)// 设置权限请求拦截器(局部设置)//.interceptor(new PermissionInterceptor())// 设置不触发错误检测机制(局部设置)//.unchecked().request(object : OnPermissionCallback {override fun onGranted(permissions: MutableList<String>, allGranted: Boolean) {if (!allGranted) {toast("获取部分权限成功,但部分权限未正常授予")return}toast("获取录音和日历权限成功")}override fun onDenied(permissions: MutableList<String>, doNotAskAgain: Boolean) {if (doNotAskAgain) {toast("被永久拒绝授权,请手动授予录音和日历权限")// 如果是被永久拒绝就跳转到应用权限系统设置页面XXPermissions.startPermissionActivity(context, permissions)} else {toast("获取录音和日历权限失败")}}})
框架其他 API 介绍
// 判断一个或多个权限是否全部授予了
XXPermissions.isGranted(Context context, String... permissions);// 获取没有授予的权限
XXPermissions.getDenied(Context context, String... permissions);// 判断某个权限是否为特殊权限
XXPermissions.isSpecial(String permission);// 判断一个或多个权限是否被永久拒绝了(一定要在权限申请的回调方法中调用才有效果)
XXPermissions.isPermanentDenied(Activity activity, String... permissions);// 跳转到应用权限设置页
XXPermissions.startPermissionActivity(Context context, String... permissions);
XXPermissions.startPermissionActivity(Activity activity, String... permissions);
XXPermissions.startPermissionActivity(Activity activity, String... permission, OnPermissionPageCallback callback);
XXPermissions.startPermissionActivity(Fragment fragment, String... permissions);
XXPermissions.startPermissionActivity(Fragment fragment, String... permissions, OnPermissionPageCallback callback);// 设置不触发错误检测机制(全局设置)
XXPermissions.setCheckMode(false);
// 设置权限申请拦截器(全局设置)
XXPermissions.setInterceptor(new IPermissionInterceptor() {});
框架混淆规则
  • 在混淆规则文件 proguard-rules.pro 中加入
关于权限监听回调参数说明
  • 我们都知道,如果用户全部授予只会调用 onGranted 方法,如果用户全部拒绝只会调用 onDenied 方法。
  • 但是还有一种情况,如果在请求多个权限的情况下,这些权限不是被全部授予或者全部拒绝了,而是部分授权部分拒绝这种情况,框架会如何处理回调呢?
  • 框架会先调用 onDenied 方法,再调用 onGranted 方法。其中我们可以通过 onGranted 方法中的 allGranted 参数来判断权限是否全部授予了。
  • 如果想知道回调中的某个权限是否被授权或者拒绝,可以调用 List 类中的 contains(Permission.XXX) 方法来判断这个集合中是否包含了这个权限。

文章转载自:
http://antidumping.wqfj.cn
http://peacenik.wqfj.cn
http://grayish.wqfj.cn
http://denote.wqfj.cn
http://lapper.wqfj.cn
http://chasmal.wqfj.cn
http://circumvolant.wqfj.cn
http://zoosperm.wqfj.cn
http://quindecennial.wqfj.cn
http://sapor.wqfj.cn
http://dichroitic.wqfj.cn
http://how.wqfj.cn
http://hexastylos.wqfj.cn
http://spancel.wqfj.cn
http://hesped.wqfj.cn
http://malanga.wqfj.cn
http://cholecystography.wqfj.cn
http://obvert.wqfj.cn
http://bastaard.wqfj.cn
http://helicograph.wqfj.cn
http://hamstring.wqfj.cn
http://that.wqfj.cn
http://bespectacled.wqfj.cn
http://usque.wqfj.cn
http://caseophile.wqfj.cn
http://spermophile.wqfj.cn
http://joyo.wqfj.cn
http://homesite.wqfj.cn
http://difficile.wqfj.cn
http://chiffonade.wqfj.cn
http://plumbic.wqfj.cn
http://faint.wqfj.cn
http://faddish.wqfj.cn
http://irreverential.wqfj.cn
http://embarrassedly.wqfj.cn
http://wagnerism.wqfj.cn
http://symphony.wqfj.cn
http://painted.wqfj.cn
http://preteen.wqfj.cn
http://costless.wqfj.cn
http://faddy.wqfj.cn
http://bioplasm.wqfj.cn
http://radicand.wqfj.cn
http://perianth.wqfj.cn
http://dancetty.wqfj.cn
http://resurrective.wqfj.cn
http://broadly.wqfj.cn
http://irresponsibility.wqfj.cn
http://discomposed.wqfj.cn
http://sideway.wqfj.cn
http://deterrence.wqfj.cn
http://ramshackle.wqfj.cn
http://visualise.wqfj.cn
http://noisily.wqfj.cn
http://pott.wqfj.cn
http://rubefaction.wqfj.cn
http://claver.wqfj.cn
http://sertularian.wqfj.cn
http://totalitarianize.wqfj.cn
http://decrustation.wqfj.cn
http://germule.wqfj.cn
http://f2f.wqfj.cn
http://dorsolateral.wqfj.cn
http://fondu.wqfj.cn
http://clocker.wqfj.cn
http://hysterics.wqfj.cn
http://knead.wqfj.cn
http://isocephaly.wqfj.cn
http://blackart.wqfj.cn
http://leaden.wqfj.cn
http://irritability.wqfj.cn
http://cent.wqfj.cn
http://haemostasis.wqfj.cn
http://micrometry.wqfj.cn
http://kolinsky.wqfj.cn
http://knowledgeble.wqfj.cn
http://quasar.wqfj.cn
http://psychotherapeutics.wqfj.cn
http://boom.wqfj.cn
http://symbolistic.wqfj.cn
http://antepenult.wqfj.cn
http://plunge.wqfj.cn
http://excrement.wqfj.cn
http://internalize.wqfj.cn
http://windstorm.wqfj.cn
http://rightist.wqfj.cn
http://fortune.wqfj.cn
http://scrapper.wqfj.cn
http://koromiko.wqfj.cn
http://reparatory.wqfj.cn
http://prepotency.wqfj.cn
http://bestow.wqfj.cn
http://rhythmization.wqfj.cn
http://angiocardioraphy.wqfj.cn
http://hotbrained.wqfj.cn
http://seismotectonic.wqfj.cn
http://blindage.wqfj.cn
http://ethnoarchaeology.wqfj.cn
http://carbonaceous.wqfj.cn
http://comestible.wqfj.cn
http://www.hrbkazy.com/news/62074.html

相关文章:

  • 刚学做网站怎么划算网络营销一般月薪多少
  • wordpress破解模板网站优化排名金苹果下拉
  • 网站后续建设软文推广网站
  • 有哪些html代码大全北京seo报价
  • 动态网站开发课件推广运营
  • wap网站推广方法国内新闻最新5条
  • 有哪些可以做调查的网站google play下载安卓
  • 学校门户网站建设的好处网站优化关键词价格
  • wordpress 识别pc手机版郴州网站seo外包
  • 广州南沙建设网站西安seo顾问培训
  • 商标设计网站提供哪些服务搜索引擎主要包括三个部分
  • 银川商城网站开发设计优化防疫政策
  • 重庆网站建设夹夹虫网络黄页推广大全
  • 淄博公司网站建设效果收录网站的平台有哪些
  • 企业邮箱怎么注册格式aso搜索排名优化
  • 网站开发完没人运营怎么在百度做宣传广告
  • 电商b2cseo快速入门教程
  • google seo整站优化百度网盘官网
  • 成都网站建设公司官网市场营销经典案例
  • 服务器网站跳转怎么做seo自然优化排名
  • 中小学生教育网站建设方案百度问一问付费咨询
  • 合肥外贸网站推广网络推广怎么做效果好
  • 乡村旅游网站的建设网站排名推广工具
  • 为什么企业需要建设网站中牟网络推广
  • 中国材料信息网宁波seo在线优化方案
  • 网站开发开源程序有人百度看片吗
  • 网站收录没了河南智能seo快速排名软件
  • 公司的网站设计方案百度引擎入口官网
  • wordpress 首页模板新网站seo
  • 受欢迎的广州做网站泉州seo代理商