踩坑初始
使用组件
我在写android studio的实验时想实现点击按钮出现通知,就去android中文官网文档中寻找,官网中的介绍是这样的:
在用户未使用您的应用时,通知可向他们及时提供有关应用事件的简短信息。本页面向您介绍如何针对 Android 4.0(API 级别 14)及更高版本创建具备各种功能的通知。
添加支持库
虽然使用 Android Studio 创建的大部分项目包含使用 NotificationCompat 所必需的依赖项,但您还是应该验证模块级 build.gradle 文件是否包含以下依赖项:
dependencies {
implementation "com.android.support:support-compat:28.0.0"
}
添加组件的java代码
首先,您需要使用 NotificationCompat.Builder 对象设置通知内容和渠道。以下示例显示了如何创建包含下列内容的通知:
小图标,通过 setSmallIcon() 设置。这是所必需的唯一用户可见内容。
标题,通过 setContentTitle() 设置。
正文文本,通过 setContentText() 设置。
通知优先级,通过 setPriority() 设置。优先级确定通知在 Android 7.1 和更低版本上的干扰程度。(对于 Android 8.0 和更高版本,必须设置渠道重要性,如下一节中所示。)
当时我的android 版本是API 33,按照文档所说设置了java函数
public void notify(View view) {
NotificationCompat.Builder builder = new NotificationCompat.Builder(this,CHANNEL_ID)
.setSmallIcon(R.drawable.xiaocao)
.setContentTitle("小草神通知您")
.setContentText("用于安卓课的报告")
.setPriority(NotificationCompat.PRIORITY_DEFAULT);
}
然后发现CHANNEL_ID报错,查询了一下发现这个是自己设置的,不影响使用就加随便添加了一个String类型。
接下来在layout新增一个按钮,用来触发事件
<Button
android:id="@+id/button2"
android:layout_width="273dp"
android:layout_height="51dp"
android:text="Button"
android:onClick="notify"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent" />
}
进行编译
点击一下左上角的锤子,进行编译
发现天坑
编译时发现
dependencies {
implementation "com.android.support:support-compat:28.0.0"
}
爆红,观察错误提示的解决方法,将下列代码添加到gradle.properties
android.enableJetifier=true
重新编译,发现依然爆红,但是爆错消失了
接下来点击运行,发现运行失败
解决天坑
java代码
开始研究是否是java里的代码不匹配当前版本,于是重新写java
// 获得对象
NotificationManager notificationManager=(NotificationManager)getSystemService(NOTIFICATION_SERVICE);
// 创建一个构造类
Notification.Builder builder=new Notification.Builder(this);
// 设置通知内容
builder.setContentTitle("小草神通知您");
builder.setContentText("用于安卓课的报告");
builder.setSmallIcon(R.drawable.xiaocao);
builder.setPriority(Notification.PRIORITY_DEFAULT);
// 创建,发送通知
Notification notification=builder.build();
notificationManager.notify(0,notification);
这个是跳过了CHANNEL_ID,以及.setPriority(NotificationCompat.PRIORITY_DEFAULT);
发现依然不行,于是开始研究是否是导包不行
寻求帮助
于是在老师的帮助之下,发现是这两个在打架
dependencies {
implementation 'androidx.appcompat:appcompat:1.3.0'
implementation "com.android.support:support-compat:28.0.0"
}
在网络上查找包的替代,可以与下列匹配不冲突
dependencies {
implementation 'androidx.appcompat:appcompat:1.3.0'
//implementation "com.android.support:support-compat:28.0.0"
implementation "androidx.core:core:1.0.0"
}
重新编译,发现版本不匹配,于是开始研究匹配的版本
网络上查找到以下版本
dependencies {
implementation "androidx.core:core:1.0.0-alpha02"
}
然后还是不行,根据编译器自带的提示,修改成
dependencies {
implementation "androidx.core:core:1.7.0-alpha01"
}
发现没有报错并且可以编译成功
结束语
此次处理成功绝大部分因为版本较少,比较好找,如果版本较多需要一个一个下,比较痛苦
刘星宇 本文连接