尽管已授予权限,Android 13 上仍不会显示通知

问题描述 投票:0回答:1

我正在尝试将在 Android 7 上运行的应用程序迁移到 Android 13。我注意到迁移后应用程序通知不再弹出。 然后我读了这篇文章:https://developer.android.com/develop/ui/views/notifications/notification-permission并发现用户必须明确允许它们。 我实现了权限请求/授予,但通知仍然没有显示。以下是应用程序源代码的相应摘录。

public class MyActivity extends AppCompatActivity {

    private static final String CHANNEL_ID = "12345";
    public static final int NEWS_NOTIFICATION_ID = 0;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
            ...
            // Prompt user to permit notifications
            if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.R) {
              if (!shouldShowRequestPermissionRationale(String.valueOf(PERMISSION_REQUEST_CODE))){
                getNotificationPermission();
              }
            }

        }

        ...

        public void getNotificationPermission(){
          try {
            if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.R) {
                ActivityCompat.requestPermissions(this,
                    new String[]{Manifest.permission.POST_NOTIFICATIONS},
                    PERMISSION_REQUEST_CODE);
            }
          } catch (Exception e) {
            Log.e(TAG, "Unable to request permission", e);
        }
    }

    @Override
    public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {
        if (requestCode == PERMISSION_REQUEST_CODE) {
            if (grantResults.length > 0 && grantResults[0] == PackageManager.PERMISSION_GRANTED) {
                Log.d("Permission is granted in onRequestPermissionsResult()");
            } else {
                Log.d("Permission is not granted in onRequestPermissionsResult()");
            }
        }

        super.onRequestPermissionsResult(requestCode, permissions, grantResults);

    }


    private void showNotification(String msg) {
        Intent resultIntent = new Intent(getApplicationContext(), MyActivity.class);
        TaskStackBuilder stackBuilder = TaskStackBuilder.create(getApplicationContext());
        stackBuilder.addNextIntentWithParentStack(resultIntent);
        PendingIntent resultPendingIntent=null;
        resultPendingIntent = stackBuilder.getPendingIntent(0, PendingIntent.FLAG_MUTABLE);

        Notification notification = new NotificationCompat.Builder(getApplicationContext(), CHANNEL_ID)
            .setTicker("ticker")
            .setSmallIcon(R.drawable.app_icon90x90)
            .setContentTitle(msg)
            .setContentText("").setContentIntent(resultPendingIntent)
            .setAutoCancel(true)
            .build();
        NotificationManager notificationManager = (NotificationManager) getApplicationContext().getSystemService(NOTIFICATION_SERVICE);
        notificationManager.notify(NEWS_NOTIFICATION_ID, notification);
    }

    ...
}

当我调试应用程序时,会发生以下情况:

应用程序显示一个对话框。 我允许通知,然后转到手机设置并查看该应用程序位于相应的列表中并且已启用。 然后我按下应用程序中的一个按钮来触发方法调用:

showNotification("Hello world");

不显示通知,也不显示错误。

可能缺少什么? Android 13 中的通知构造是否有所不同,或者是否存在其他一些手机设置可能会阻止其显示? 我可以在模拟器和手机上观察到问题。

java android notifications
1个回答
1
投票

当我尝试你的代码时,我发现它出现“未找到频道”错误。您应该从 API 26 级别开始创建通知通道。

这是代码的编辑版本:

    public void getNotificationPermission() {
        try {
            if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
                int importance = NotificationManager.IMPORTANCE_DEFAULT;
                NotificationChannel channel = new NotificationChannel(CHANNEL_ID, "YOUR_CHANNEL_NAME", importance);
                channel.setDescription("CHANNEL_DESCRIPTION");

                NotificationManager notificationManager = getSystemService(NotificationManager.class);
                notificationManager.createNotificationChannel(channel);
            }
            if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.R) {
                ActivityCompat.requestPermissions(this,
                        new String[]{Manifest.permission.POST_NOTIFICATIONS},
                        PERMISSION_REQUEST_CODE);
            }
        } catch (Exception e) {
            Log.e(TAG, "Unable to request permission", e);
        }
    }

当我尝试这段代码时,我看到通知已成功发送。

© www.soinside.com 2019 - 2024. All rights reserved.