1. 获取关照权限
在 AndroidManifest.xml 里加上权限配置,如下。
- <?xml version="1.0" encoding="utf-8"?>
- <manifest xmlns:android="http://schemas.android.com/apk/res/android"
- xmlns:tools="http://schemas.android.com/tools">
- <!-- 权限配置 -->
- <!-- 通知栏信息权限 -->
- <uses-permission android:name="android.permission.POST_NOTIFICATIONS" />
- <!-- 下面是application配置 -->
- </manifest>
复制代码 可以在任意运动类中检查并申请相干权限
- import android.content.pm.PackageManager;
- import android.Manifest;
- import android.os.Build;
- import android.os.Bundle;
- import android.widget.Button;
- import android.widget.Toast;
- import androidx.activity.EdgeToEdge;
- import androidx.annotation.NonNull;
- import androidx.annotation.RequiresApi;
- import androidx.appcompat.app.AppCompatActivity;
- import androidx.core.app.ActivityCompat;
- import androidx.core.content.ContextCompat;
- import androidx.core.graphics.Insets;
- import androidx.core.view.ViewCompat;
- import androidx.core.view.WindowInsetsCompat;
- import com.example.sda.R;
- /**
- * @author pengYuJun
- */
- public class MainActivity extends AppCompatActivity {
- /**
- * 通知权限自定义编码
- */
- private static final int NOTIFICATION_PERMISSION_CODE = 1;
- @Override
- protected void onCreate(Bundle savedInstanceState) {
- // 调用父类的 onCreate 方法,以确保正确初始化活动
- super.onCreate(savedInstanceState);
- // 设置页面布局配置
- setContentView(R.layout.activity_main);
- // 检查权限,并申请
- if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.TIRAMISU) {
- checkPermission();
- }
- }
- /**
- * 检查并请求所需权限
- */
- @RequiresApi(api = Build.VERSION_CODES.TIRAMISU)
- private void checkPermission(){
- // 检查通知权限
- if (ContextCompat.checkSelfPermission(this, Manifest.permission.POST_NOTIFICATIONS) != PackageManager.PERMISSION_GRANTED) {
- // 请求权限
- ActivityCompat.requestPermissions(this, new String[]{Manifest.permission.POST_NOTIFICATIONS}, NOTIFICATION_PERMISSION_CODE);
- }
- }
- /**
- * 权限请求结果返回
- */
- @Override
- public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {
- super.onRequestPermissionsResult(requestCode, permissions, grantResults);
- if (grantResults.length == 0){
- return;
- }
- if (requestCode == NOTIFICATION_PERMISSION_CODE) {
- if (grantResults[0] != PackageManager.PERMISSION_GRANTED) {
- // 权限被拒绝,显示提示信息
- Toast.makeText(this, "申请通知权限被拒绝", Toast.LENGTH_SHORT).show();
- }
- }
- }
- }
复制代码 2.编写关照工具类
- import android.app.Notification;
- import android.app.NotificationChannel;
- import android.app.NotificationManager;
- import android.app.PendingIntent;
- import android.content.Context;
- import android.content.Intent;
- import android.graphics.BitmapFactory;
- import android.os.Build;
- import androidx.core.app.NotificationCompat;
- import com.example.sda.R;
- import com.example.sda.activity.MainActivity;
- /**
- * @author pengYuJun
- */
- public class NotificationUtils {
- public static void showNotification(Context context, String title, String content) {
- NotificationManager manager = (NotificationManager) context.getSystemService(Context.NOTIFICATION_SERVICE);
- String channelId = context.getResources().getString(R.string.app_name);
- String channelName = context.getResources().getString(R.string.app_name);
- // 创建通知渠道(仅在 API 级别 26 及更高版本中需要)
- if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
- NotificationChannel channel = new NotificationChannel(
- channelId,
- channelName,
- NotificationManager.IMPORTANCE_HIGH // 使用高重要性
- );
- // 注册渠道
- manager.createNotificationChannel(channel);
- }
- // 通知点击的跳转页面
- Intent intentTarget = new Intent(context.getApplicationContext(), MainActivity.class);
- intentTarget.putExtra("xxx","xxx");
- intentTarget.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
- PendingIntent pendingIntent = PendingIntent.getActivity(context, 1, intentTarget, PendingIntent.FLAG_IMMUTABLE);
- // 创建通知
- Notification notification = new NotificationCompat.Builder(context, channelId)
- .setContentTitle(title)
- .setContentText(content)
- .setContentIntent(pendingIntent)
- .setWhen(System.currentTimeMillis())
- .setSmallIcon(R.drawable.icon_app)
- .setLargeIcon(BitmapFactory.decodeResource(context.getResources(), R.drawable.icon_app))
- .setAutoCancel(true)
- .setDefaults(Notification.DEFAULT_ALL)
- .setPriority(NotificationCompat.PRIORITY_HIGH) // 使用高优先级
- .build();
- // 获取当前时间戳(毫秒),作为通知Id
- long currentTimeMillis = System.currentTimeMillis();
- // 将时间戳转换为 int 类型
- int notifyId = (int) (currentTimeMillis % Integer.MAX_VALUE);
- // 发送通知
- manager.notify(notifyId, notification);
- }
- }
复制代码 注意,当版本高时,创建关照渠道,须要使用高重要性: NotificationManager.IMPORTANCE_HIGH,如许关照会弹出悬挂横幅弹窗。若版本低时,则须要高优先级:setPriority(NotificationCompat.PRIORITY_HIGH)。当不须要弹出悬挂横幅弹窗时,默认重要性、默认优先级即可。
再注意,每次改变重要性、优先级这些,须要卸载app再重新安装才能见效。至少在笔者2025/2/7开辟时,为如此。
其他配置可自行根据需求探索。
3. 进行任务栏消息关照
- NotificationUtils.showNotification(getApplicationContext(), "title", "message");
复制代码 免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。 |