本人是按照《第一行代码》来学习Android开发的。但是此书是2016年出版,至今到2019年中谷歌公司也在不断对AS进行更新。如方法的废弃或改进、依赖的更新等。
于是本人将学习中遇到的问题和解决方法统一记录在这,主要分为三类改动。
从3.4版本的gradle开始,compile已经被api与implementation取代。
关于三者的区别请看文章api与implementation的区别
此改动主要影响的是控件名和添加的包名,使用旧版包名会发生错误(app异常退出)
两者的映射关系详见类映射
这是我在简书上找到的原因Android:你好,androidX!再见,android.support
依赖由
compile ‘com.android.support:recyclerview-v7:24.2.1’ 改为
implementation ‘com.android.support:recyclerview-v7:28.0.0’
布局名称由
android.support.v7.widget.RecyclerView 改为
androidx.recyclerview.widget.RecyclerView
我在做利用相机和浏览相册项目时,AndroidManifest文件中如下语句飘红
android:name="android.support.v4.content.FileProvider"
可以改为
android:name="androidx.core.content.FileProvider"
//android.support.v7.widget.Toolbar//已废弃
androidx.appcompat.widget.Toolbar
NotificationCompat.Builder(Context context)方法改为
NotificationCompat.Builder(@NonNull Context context, @NonNull String channelId)方法
增加了一个String参数channelId,用于将notification进行分类,如设置不同优先级等。并且就算这样,通知还是不能正常发送,还需在该方法前加入代码:
NotificationManager manager = (NotificationManager) getSystemService(NOTIFICATION_SERVICE);
if (Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.O) {
//只在Android O之上需要渠道,这里的第一个参数要和下面的channelId一样
NotificationChannel notificationChannel = new NotificationChannel("1", "name", NotificationManager.IMPORTANCE_HIGH);
//如果这里用IMPORTANCE_NOENE就需要在系统的设置里面开启渠道,通知才能正常弹出
manager.createNotificationChannel(notificationChannel);
}
另外,如果你想让你的通知具有振动和顶部弹窗功能还需要在AndroidManifest中申明权限
<uses-permission android:name="android.permission.VIBRATE" />
因为这不是危险权限所以在安装app时系统会默认帮你安装,然后打开手机相应app的顶部弹窗和振动权限即可。
按《第一行代码》中的操作在我的华为荣耀10上运行时,出现错误:
解决方案:在Androidmanifest.xml中加入代码
android:usesCleartextTraffic="true"
因为这里牵涉到了通知的相关方法,但是如之前提到的,通知中某些方法已经过时且添加了渠道的概念。这里做出的改动和通知一样。再在AndroidManifest中添加如下权限即可
<uses-permission android:name="android.permission.FOREGROUND_SERVICE"/>
下载失败
原地址改为:
http://lbs.baidu.com/index.php?title=sdk/download&action#selected=mapsdk_basicmap,mapsdk_searchfunction,mapsdk_lbscloudsearch,mapsdk_calculationtool,mapsdk_radar
使用我的honor10测试时会出现网页无法显示或停留在debug读取界面
但是使用虚拟机却没有问题,解决办法:
在res下创建文件network_security_config.xml
<?xml version="1.0" encoding="utf-8"?>
<network-security-config>
<base-config cleartextTrafficPermitted="true">
<trust-anchors>
<certificates src="system" />
</trust-anchors>
</base-config>
</network-security-config>
在Androidmanifest.xml中加入代码
android:networkSecurityConfig="@xml/network_security_config"
我也不知道为啥,来自简书