Android Studio通知未显示

fslejnso  于 2023-06-20  发布在  Android
关注(0)|答案(2)|浏览(330)

我有一个按钮,当按下5次将创建一个用户通知。我能够让应用程序运行,但当按下按钮时,我可以看到“计数器”正在递增,但当>=5时没有任何通知显示。我在AndroidManifest.xml中输入了以下行:

  1. <uses-permission android:name="android.permission.INTERNET" />
  2. <uses-permission android:name="android.permission.VIBRATE" />
  3. <uses-permission android:name="android.permission.POST_NOTIFICATIONS" />

下面是我的MainActivity.java文件:

  1. package com.enetapplications.localnotifications;
  2. import androidx.annotation.NonNull;
  3. import androidx.appcompat.app.AppCompatActivity;
  4. import androidx.core.app.ActivityCompat;
  5. import androidx.core.app.NotificationCompat;
  6. import androidx.core.app.NotificationManagerCompat;
  7. import android.app.Notification;
  8. import android.app.NotificationChannel;
  9. import android.app.NotificationManager;
  10. import android.content.pm.PackageManager;
  11. import android.os.Build;
  12. import android.os.Bundle;
  13. import android.view.View;
  14. import android.widget.Button;
  15. import android.Manifest;
  16. public class MainActivity extends AppCompatActivity {
  17. Button button;
  18. public final String CHANNEL_ID = "1_" + System.currentTimeMillis();
  19. int counter = 0;
  20. private static final int PERMISSION_REQUEST_CODE = 123;
  21. @Override
  22. protected void onCreate(Bundle savedInstanceState) {
  23. super.onCreate(savedInstanceState);
  24. setContentView(R.layout.activity_main);
  25. button = findViewById(R.id.button);
  26. button.setOnClickListener(new View.OnClickListener() {
  27. @Override
  28. public void onClick(View v) {
  29. requestPermission();
  30. counter++;
  31. button.setText("" + counter);
  32. if (counter >= 5) {
  33. startNotification();
  34. }
  35. }
  36. });
  37. }
  38. public void startNotification() {
  39. if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
  40. NotificationChannel channel = new NotificationChannel(CHANNEL_ID, "Channel Name", NotificationManager.IMPORTANCE_DEFAULT);
  41. NotificationManager manager = getSystemService(NotificationManager.class);
  42. manager.createNotificationChannel(channel);
  43. }
  44. NotificationCompat.Builder builder = new NotificationCompat.Builder(MainActivity.this, CHANNEL_ID)
  45. .setSmallIcon(R.drawable.ic_add_alert_24)
  46. .setContentTitle("Title")
  47. .setContentText("Notification Text")
  48. .setPriority(NotificationCompat.PRIORITY_DEFAULT);
  49. NotificationManagerCompat compat = NotificationManagerCompat.from(MainActivity.this);
  50. if (compat.areNotificationsEnabled()) {
  51. if (ActivityCompat.checkSelfPermission(MainActivity.this, Manifest.permission.POST_NOTIFICATIONS) != PackageManager.PERMISSION_GRANTED) {
  52. ActivityCompat.requestPermissions(MainActivity.this, new String[]{Manifest.permission.POST_NOTIFICATIONS}, PERMISSION_REQUEST_CODE);
  53. } else {
  54. compat.notify(1, builder.build());
  55. }
  56. }
  57. }
  58. private void requestPermission() {
  59. if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
  60. if (checkSelfPermission(Manifest.permission.VIBRATE) != PackageManager.PERMISSION_GRANTED) {
  61. requestPermissions(new String[]{Manifest.permission.VIBRATE}, PERMISSION_REQUEST_CODE);
  62. } else {
  63. startNotification();
  64. }
  65. } else {
  66. startNotification();
  67. }
  68. }
  69. @Override
  70. public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {
  71. super.onRequestPermissionsResult(requestCode, permissions, grantResults);
  72. if (requestCode == PERMISSION_REQUEST_CODE) {
  73. if (grantResults.length > 0 && grantResults[0] == PackageManager.PERMISSION_GRANTED) {
  74. startNotification();
  75. } else {
  76. // Handle permission denied
  77. }
  78. }
  79. }
  80. }
ergxz8rk

ergxz8rk1#

startNotification()中存在逻辑错误。compat.areNotificationsEnabled()总是返回false,如果应用程序没有通知权限!另外,requestPermission()函数也是不相关的,因为代码已经在startNotification()中请求了权限。
按钮点击监听器不需要调用requestPermission()

  1. button = findViewById(R.id.button);
  2. button.setOnClickListener(new View.OnClickListener() {
  3. @Override
  4. public void onClick(View v) {
  5. counter++;
  6. button.setText("" + counter);
  7. if (counter >= 5) {
  8. startNotification();
  9. }
  10. }
  11. });

您可以简化startNotification()

  1. public void startNotification() {
  2. if (ActivityCompat.checkSelfPermission(MainActivity.this, android.Manifest.permission.POST_NOTIFICATIONS) != PackageManager.PERMISSION_GRANTED) {
  3. //Request permissions and return
  4. ActivityCompat.requestPermissions(MainActivity.this, new String[]{android.Manifest.permission.POST_NOTIFICATIONS}, PERMISSION_REQUEST_CODE);
  5. return;
  6. }
  7. if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
  8. NotificationChannel channel = new NotificationChannel(CHANNEL_ID, "Channel Name", NotificationManager.IMPORTANCE_DEFAULT);
  9. NotificationManager manager = getSystemService(NotificationManager.class);
  10. manager.createNotificationChannel(channel);
  11. }
  12. NotificationCompat.Builder builder = new NotificationCompat.Builder(MainActivity.this, CHANNEL_ID)
  13. .setSmallIcon(R.drawable.ic_add_alert_24)
  14. .setContentTitle("Title")
  15. .setContentText("Notification Text")
  16. .setChannelId(CHANNEL_ID) //You might want to include this
  17. .setPriority(NotificationCompat.PRIORITY_DEFAULT);
  18. NotificationManagerCompat.from(MainActivity.this)
  19. .notify(1, builder.build());
  20. }

我还注意到你用错了CHANNEL_ID。此代码将在您每次启动应用程序时创建一个新的通知通道:

相反,只需将CHANNEL_ID设置为某个常量:

  1. public final String CHANNEL_ID = "Default channel";
展开查看全部
d5vmydt9

d5vmydt92#

如果Android Studio中未显示通知,您可以尝试以下几种可能的原因和故障排除步骤:确保在Android Studio中启用通知。进入文件->设置(或macOS上的首选项)->外观和行为->通知。确保所需的通知类型设置为“日志错误”或更高级别。确认系统的通知设置允许Android Studio显示通知。在您的Android设备上,转到设置->应用程序-> Android Studio ->通知。确保允许通知,并且启用了所需的通知通道。有时,简单的重新启动就可以解决通知问题。完全关闭Android Studio,然后重新打开,查看通知是否开始出现。Android Studio的事件日志可以提供有关可能影响通知的任何错误或问题的信息。进入View -> Tool Windows -> Event Log。查找与通知相关的任何相关错误消息或通知。确保您使用的是最新版本的Android Studio。检查更新并安装所有可用的更新,以确保您拥有IDE的最新版本。如果您在Android Studio中启用了“保存电”模式,它可能会抑制某些通知。通过转到文件->保存模式并取消选中该选项来禁用此模式。如果您希望在代码中看到特定的通知,请仔细检查是否已正确实现它们。检查代码中是否存在任何可能阻止触发通知的问题。在某些情况下,防病毒软件或防火墙设置可能会干扰Android Studio的通知。暂时禁用这些工具并检查通知是否开始出现。

相关问题