java - Native Android:应用程序崩溃时调用通知
问题描述
我希望我的应用程序在应用程序崩溃时通知用户。
build.gradle(:app)
android {
compileSdkVersion 29
buildToolsVersion "29.0.2"
defaultConfig {
applicationId "com.example"
minSdkVersion 21
targetSdkVersion 29
versionCode 1
versionName "1.0"
testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
}
buildTypes {
release {
minifyEnabled false
proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
}
}
}
我做createNotificationChannel()
的事情:调用onCreate()
调用createNotification()
和onStop()
onDestroy()
createNotification() 和 createNotificationChannel()
@RequiresApi(api = Build.VERSION_CODES.O)
public Notification.Builder createNotification() {
Intent intent = new Intent(this, MainActivity.class);
intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_CLEAR_TASK);
PendingIntent pendingIntent = PendingIntent.getActivity(this, 0, intent, 0);
Notification.Builder builder = new Notification.Builder(this, "screenomics_id")
.setSmallIcon(R.drawable.switch_thumb)
.setContentTitle("Screenomics app has stopped!")
.setContentText("If this is unintentional, please restart the application.")
.setPriority(Notification.PRIORITY_MAX)
.setContentIntent(pendingIntent)
.setAutoCancel(true);
return builder;
}
private void createNotificationChannel() {
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
CharSequence name = "screenomics";
String description = "screenomics description";
int importance = NotificationManager.IMPORTANCE_DEFAULT;
NotificationChannel channel = new NotificationChannel("screenomics_id", name, importance);
channel.setDescription(description);
NotificationManager notificationManager = getSystemService(NotificationManager.class);
notificationManager.createNotificationChannel(channel);
}
}
onDestroy()
@RequiresApi(api = Build.VERSION_CODES.O)
@Override
public void onDestroy() {
super.onDestroy();
NotificationManager notificationManager = (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE);
if (notificationManager != null) {
notificationManager.notify(0, createNotification().build());
}
mHandler.removeCallbacksAndMessages(null);
}
停止()
@RequiresApi(api = Build.VERSION_CODES.O)
@Override
public void onStop() {
NotificationManager notificationManager = (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE);
try {
stopRecording();
} catch (RuntimeException e) {
e.printStackTrace();
} finally {
if (notificationManager != null) {
notificationManager.notify(0, createNotification().build());
}
}
}
解决方案
推荐阅读
- r - 如何将较小表和/或矩阵中的相应值输入到较大的矩阵中?
- db2 - 从 db2 9.7 express-c 迁移到 db2 11.5 developer
- python - 使用 SQLAlchemy 在数据库插入上创建和删除文件
- javascript - 模态窗口删除错误数据
- python-3.x - 如何将 python 字典数据插入谷歌云 bigquery
- excel - 将数据复制到临时表,跳过列
- android-studio - android布局动画从下到上
- sql - 将具有不同键的字典保存到 SQL
- vue.js - Vue 2:获取访问“/api/api/X”而不是“/api/X”?
- html - 如何选择特定元素的子元素,而不必一次又一次地键入父元素的名称?