安卓开发-推送通知
开发环境:MacbookPro Catalina + Android Studio 3.5.3
1. 新建一个Empty Activity工程
工程名为:TestNotification02
2. 在对应的Layout文件中加入三个控件
两个EditText分别用来输入通知的标题和内容,按钮用来推送消息;
3. MainActivity.java中实现代码
package com.example.testnotification2;
import androidx.appcompat.app.AppCompatActivity;
import androidx.core.app.NotificationCompat;
import android.app.Notification;
import android.app.NotificationChannel;
import android.app.NotificationManager;
import android.os.Build;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
public class MainActivity extends AppCompatActivity {
EditText editText;
EditText editText1;
Button button;
NotificationManager manager;
NotificationChannel channel;
String strChannelID = "strChannelID1";
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
editText = findViewById(R.id.editText);
editText1 = findViewById(R.id.editText2);
button = findViewById(R.id.button);
manager = (NotificationManager) getSystemService(NOTIFICATION_SERVICE);
channel = new NotificationChannel(strChannelID, "不知道这个是啥", NotificationManager.IMPORTANCE_DEFAULT);
manager.createNotificationChannel(channel);
button.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
Notification.Builder builder = new Notification.Builder(MainActivity.this, strChannelID);
builder.setSmallIcon(R.drawable.icon);
builder.setTicker("这个Ticker是通知的标题吗?");
builder.setContentTitle("这个是ContentTitle:" + editText.getText().toString());
builder.setContentText("这个是ContentText:" + editText1.getText().toString());
manager.notify(0x01, builder.build());
} else {
NotificationCompat.Builder builder = new NotificationCompat.Builder(MainActivity.this);
builder.setSmallIcon(R.drawable.icon);
builder.setContentTitle(editText.getText().toString());
builder.setContentText(editText1.getText().toString());
builder.setOngoing(true);
manager.notify(0x02, builder.build());
}
}
});
}
}
4.执行效果如下所示
输入测试内容后点击按钮:
5. 系统设置中查看APP的通知管理效果如下
如果一个程序中有多个通知开关选项时,可以通过创建多个通知通道的方式来实现,第二个参数即为在设置中显示的通知菜单名称;
channel = new NotificationChannel(strChannelID, "不知道这个是啥", NotificationManager.IMPORTANCE_DEFAULT);
特别注意:如果在创建推送通知消息时,不设置其setSmallIcon属性,则无法成功发送推送通知;