【Android】Android开辟应用怎样开启任务栏消息关照

打印 上一主题 下一主题

主题 991|帖子 991|积分 2973

1. 获取关照权限

在 AndroidManifest.xml 里加上权限配置,如下。
  1. <?xml version="1.0" encoding="utf-8"?>
  2. <manifest xmlns:android="http://schemas.android.com/apk/res/android"
  3.     xmlns:tools="http://schemas.android.com/tools">
  4.     <!--  权限配置  -->
  5.     <!--  通知栏信息权限  -->
  6.     <uses-permission android:name="android.permission.POST_NOTIFICATIONS" />
  7.     <!--  下面是application配置  -->
  8. </manifest>
复制代码
可以在任意运动类中检查并申请相干权限
  1. import android.content.pm.PackageManager;
  2. import android.Manifest;
  3. import android.os.Build;
  4. import android.os.Bundle;
  5. import android.widget.Button;
  6. import android.widget.Toast;
  7. import androidx.activity.EdgeToEdge;
  8. import androidx.annotation.NonNull;
  9. import androidx.annotation.RequiresApi;
  10. import androidx.appcompat.app.AppCompatActivity;
  11. import androidx.core.app.ActivityCompat;
  12. import androidx.core.content.ContextCompat;
  13. import androidx.core.graphics.Insets;
  14. import androidx.core.view.ViewCompat;
  15. import androidx.core.view.WindowInsetsCompat;
  16. import com.example.sda.R;
  17. /**
  18. * @author pengYuJun
  19. */
  20. public class MainActivity extends AppCompatActivity {
  21.     /**
  22.      * 通知权限自定义编码
  23.      */
  24.     private static final int NOTIFICATION_PERMISSION_CODE = 1;
  25.     @Override
  26.     protected void onCreate(Bundle savedInstanceState) {
  27.         // 调用父类的 onCreate 方法,以确保正确初始化活动
  28.         super.onCreate(savedInstanceState);
  29.         // 设置页面布局配置
  30.         setContentView(R.layout.activity_main);
  31.         // 检查权限,并申请
  32.         if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.TIRAMISU) {
  33.             checkPermission();
  34.         }
  35.     }
  36.     /**
  37.      * 检查并请求所需权限
  38.      */
  39.     @RequiresApi(api = Build.VERSION_CODES.TIRAMISU)
  40.     private void checkPermission(){
  41.         // 检查通知权限
  42.         if (ContextCompat.checkSelfPermission(this, Manifest.permission.POST_NOTIFICATIONS) != PackageManager.PERMISSION_GRANTED) {
  43.             // 请求权限
  44.             ActivityCompat.requestPermissions(this, new String[]{Manifest.permission.POST_NOTIFICATIONS}, NOTIFICATION_PERMISSION_CODE);
  45.         }
  46.     }
  47.     /**
  48.      * 权限请求结果返回
  49.      */
  50.     @Override
  51.     public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {
  52.         super.onRequestPermissionsResult(requestCode, permissions, grantResults);
  53.         if (grantResults.length == 0){
  54.             return;
  55.         }
  56.         if (requestCode == NOTIFICATION_PERMISSION_CODE) {
  57.             if (grantResults[0] != PackageManager.PERMISSION_GRANTED) {
  58.                 // 权限被拒绝,显示提示信息
  59.                 Toast.makeText(this, "申请通知权限被拒绝", Toast.LENGTH_SHORT).show();
  60.             }
  61.         }
  62.     }
  63. }
复制代码
2.编写关照工具类

  1. import android.app.Notification;
  2. import android.app.NotificationChannel;
  3. import android.app.NotificationManager;
  4. import android.app.PendingIntent;
  5. import android.content.Context;
  6. import android.content.Intent;
  7. import android.graphics.BitmapFactory;
  8. import android.os.Build;
  9. import androidx.core.app.NotificationCompat;
  10. import com.example.sda.R;
  11. import com.example.sda.activity.MainActivity;
  12. /**
  13. * @author pengYuJun
  14. */
  15. public class NotificationUtils {
  16.     public static void showNotification(Context context, String title, String content) {
  17.         NotificationManager manager = (NotificationManager) context.getSystemService(Context.NOTIFICATION_SERVICE);
  18.         String channelId = context.getResources().getString(R.string.app_name);
  19.         String channelName = context.getResources().getString(R.string.app_name);
  20.         // 创建通知渠道(仅在 API 级别 26 及更高版本中需要)
  21.         if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
  22.             NotificationChannel channel = new NotificationChannel(
  23.                     channelId,
  24.                     channelName,
  25.                     NotificationManager.IMPORTANCE_HIGH // 使用高重要性
  26.             );
  27.             // 注册渠道
  28.             manager.createNotificationChannel(channel);
  29.         }
  30.         // 通知点击的跳转页面
  31.         Intent intentTarget = new Intent(context.getApplicationContext(), MainActivity.class);
  32.         intentTarget.putExtra("xxx","xxx");
  33.         intentTarget.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
  34.         PendingIntent pendingIntent = PendingIntent.getActivity(context, 1, intentTarget, PendingIntent.FLAG_IMMUTABLE);
  35.         // 创建通知
  36.         Notification notification = new NotificationCompat.Builder(context, channelId)
  37.                 .setContentTitle(title)
  38.                 .setContentText(content)
  39.                 .setContentIntent(pendingIntent)
  40.                 .setWhen(System.currentTimeMillis())
  41.                 .setSmallIcon(R.drawable.icon_app)
  42.                 .setLargeIcon(BitmapFactory.decodeResource(context.getResources(), R.drawable.icon_app))
  43.                 .setAutoCancel(true)
  44.                 .setDefaults(Notification.DEFAULT_ALL)
  45.                 .setPriority(NotificationCompat.PRIORITY_HIGH) // 使用高优先级
  46.                 .build();
  47.         // 获取当前时间戳(毫秒),作为通知Id
  48.         long currentTimeMillis = System.currentTimeMillis();
  49.         // 将时间戳转换为 int 类型
  50.         int notifyId = (int) (currentTimeMillis % Integer.MAX_VALUE);
  51.         // 发送通知
  52.         manager.notify(notifyId, notification);
  53.     }
  54. }
复制代码
注意,当版本高时,创建关照渠道,须要使用高重要性: NotificationManager.IMPORTANCE_HIGH,如许关照会弹出悬挂横幅弹窗。若版本低时,则须要高优先级:setPriority(NotificationCompat.PRIORITY_HIGH)。当不须要弹出悬挂横幅弹窗时,默认重要性、默认优先级即可。
再注意,每次改变重要性、优先级这些,须要卸载app再重新安装才能见效。至少在笔者2025/2/7开辟时,为如此。
其他配置可自行根据需求探索。
3. 进行任务栏消息关照

  1. NotificationUtils.showNotification(getApplicationContext(), "title", "message");
复制代码
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

科技颠覆者

金牌会员
这个人很懒什么都没写!
快速回复 返回顶部 返回列表