一.Boat
- 手机升级安卓10.0后突然视频放不出来了。后来百度找到了解决方法
在manifest的application里面加上这句就好了 android:requestLegacyExternalStorage=“true”
- 在AS中import module时可能会存在应用dependencies时无法显示本地的module,这个时候应该查看settings.gradle是否有相应的app配置,当然主app只能配一个
- Device File Explore 查看资源入口,最简单的方法是看看右边侧边栏有没有,一般都是有的
- okhttp的发送情况,比如说请求头啦,这个在Faraway里面写了,还有 http,https的关联啦
- Configure build 下载慢的问题,情况一可能是访问google和jcenter被墙了,用阿里镜像替代,防止最外层的全局build.gradle中,还有一个方法是加速的传送门
repositories {
maven{
url 'http://maven.aliyun.com/nexus/content/groups/public/'}
google()
/* google()
jcenter()*/
}
allprojects {
repositories {
maven{
url 'http://maven.aliyun.com/nexus/content/groups/public/'}
google()
/* google()
jcenter()*/
}
}
- 安卓权限
1)实现理念:
a. 权限先定义到静态字符数组
b. 判断当前系统是否是Android6.0(对应API 23)以及以上,检查写文件的权限(比较典型),没有就动态申请,三个参数(当前类,权限集,请求码)
c…回调函数,申请权限后回调onRequestPermissionResult函数,同样也三个参数
二.优化升级
普通权限在清单文件中注册就可以了,但危险权限必须动态申请
- initdata中加载数据的部分提取方法-》loadsongs(),在调用数据查询前动态申请
- 再封装一个方法(handlePermission),专门处理权限问题,美滋滋
- 具体升级思路是点到列表界面 弹出权限申请,要是点取消呢,下次到这个界面就都弹出易懂的提升,请求权限分三个步骤
1)in
a.android.Manifest.permission.READ_EXTERNAL_STORAGE
是SDK下Manifest封装好的一个读取属性简写,第一步检查有没有权限,
b.ActivityCompat.checkSelfPermission(it,permission)
方法是检查权限,第一个参数是context用了lambda表达式,返回是分别是,对应true和false
c.第二个方法,检查若返回值为true则说明用户没看懂,程序需要弹出自定义提示申请
//处理权限问题
private fun handlePermission() {
val permission=android.Manifest.permission.READ_EXTERNAL_STORAGE
val checkSelfPermission=context?.let {
ActivityCompat.checkSelfPermission(it,permission) }
if (checkSelfPermission==PackageManager.PERMISSION_GRANTED){
//已经获取
loadSongs()
}else{
//没有获取权限
if(activity?.let {
ActivityCompat.shouldShowRequestPermissionRationale(it,permission) }!!){
//结果为true则需要弹出对话框进行再次请求
//AlertDialog anko封装
alert("我们只会访问音乐文件,不会访问隐私照片","温馨提示") {
yesButton {
myRequsetPerssion() }
noButton {
}
}.show()
}else{
//不需要弹出
myRequsetPerssion()
}
}
}
2)core:定义权限申请方法
private fun myRequsetPerssion() {
//真正申请权限
val permissions= arrayOf(android.Manifest.permission.READ_EXTERNAL_STORAGE)//可以申请多个权限
requestPermissions(permissions,1)
}
3)outjudge 请求结果回调
/*
* 接收权限授权结果
* requestCode请求码
* permission权限申请数组
* grantResules申请之后结果//int array 只申请了一个就取首地址
* */
//结果回调
override fun onRequestPermissionsResult(requestCode: Int, permissions: Array<out String>, grantResults: IntArray) {
super.onRequestPermissionsResult(requestCode, permissions, grantResults)
if (grantResults[0]==PackageManager.PERMISSION_GRANTED){
loadSongs()
}
}