AS-实践《第一行代码》中的出现的问题

目录

      • 前言
    • 依赖改动
    • 旧支持库软件包废弃,改为androidx 软件包
      • Recyclerview
      • 内容提供器Provider
      • 控件toolbar
      • 等等
    • 其他主要问题
      • 通知Notification
      • 内嵌网页WebView
      • 前台服务Foreground
      • 下载服务
      • 百度LBSsdk下载地址更新
      • 酷欧天气

前言

本人是按照《第一行代码》来学习Android开发的。但是此书是2016年出版,至今到2019年中谷歌公司也在不断对AS进行更新。如方法的废弃或改进、依赖的更新等。
于是本人将学习中遇到的问题和解决方法统一记录在这,主要分为三类改动。

依赖改动

从3.4版本的gradle开始,compile已经被api与implementation取代。
关于三者的区别请看文章api与implementation的区别

旧支持库软件包废弃,改为androidx 软件包

此改动主要影响的是控件名和添加的包名,使用旧版包名会发生错误(app异常退出)
两者的映射关系详见类映射
这是我在简书上找到的原因Android:你好,androidX!再见,android.support

Recyclerview

依赖由
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

内容提供器Provider

我在做利用相机和浏览相册项目时,AndroidManifest文件中如下语句飘红

android:name="android.support.v4.content.FileProvider"

可以改为

android:name="androidx.core.content.FileProvider"

控件toolbar

//android.support.v7.widget.Toolbar//已废弃
androidx.appcompat.widget.Toolbar

等等

其他主要问题

通知Notification

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的顶部弹窗和振动权限即可。
AS-实践《第一行代码》中的出现的问题_第1张图片

内嵌网页WebView

按《第一行代码》中的操作在我的华为荣耀10上运行时,出现错误:
AS-实践《第一行代码》中的出现的问题_第2张图片
解决方案:在Androidmanifest.xml中加入代码

android:usesCleartextTraffic="true"

前台服务Foreground

因为这里牵涉到了通知的相关方法,但是如之前提到的,通知中某些方法已经过时且添加了渠道的概念。这里做出的改动和通知一样。再在AndroidManifest中添加如下权限即可

    <uses-permission android:name="android.permission.FOREGROUND_SERVICE"/>

下载服务

下载失败

百度LBSsdk下载地址更新

原地址改为:

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"

我也不知道为啥,来自简书

你可能感兴趣的:(安卓开发学习中)