我有一个按钮,当按下5次将创建一个用户通知。我能够让应用程序运行,但当按下按钮时,我可以看到“计数器”正在递增,但当>=5时没有任何通知显示。我在AndroidManifest.xml中输入了以下行:
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.VIBRATE" />
<uses-permission android:name="android.permission.POST_NOTIFICATIONS" />
下面是我的MainActivity.java文件:
package com.enetapplications.localnotifications;
import androidx.annotation.NonNull;
import androidx.appcompat.app.AppCompatActivity;
import androidx.core.app.ActivityCompat;
import androidx.core.app.NotificationCompat;
import androidx.core.app.NotificationManagerCompat;
import android.app.Notification;
import android.app.NotificationChannel;
import android.app.NotificationManager;
import android.content.pm.PackageManager;
import android.os.Build;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.Manifest;
public class MainActivity extends AppCompatActivity {
Button button;
public final String CHANNEL_ID = "1_" + System.currentTimeMillis();
int counter = 0;
private static final int PERMISSION_REQUEST_CODE = 123;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
button = findViewById(R.id.button);
button.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
requestPermission();
counter++;
button.setText("" + counter);
if (counter >= 5) {
startNotification();
}
}
});
}
public void startNotification() {
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
NotificationChannel channel = new NotificationChannel(CHANNEL_ID, "Channel Name", NotificationManager.IMPORTANCE_DEFAULT);
NotificationManager manager = getSystemService(NotificationManager.class);
manager.createNotificationChannel(channel);
}
NotificationCompat.Builder builder = new NotificationCompat.Builder(MainActivity.this, CHANNEL_ID)
.setSmallIcon(R.drawable.ic_add_alert_24)
.setContentTitle("Title")
.setContentText("Notification Text")
.setPriority(NotificationCompat.PRIORITY_DEFAULT);
NotificationManagerCompat compat = NotificationManagerCompat.from(MainActivity.this);
if (compat.areNotificationsEnabled()) {
if (ActivityCompat.checkSelfPermission(MainActivity.this, Manifest.permission.POST_NOTIFICATIONS) != PackageManager.PERMISSION_GRANTED) {
ActivityCompat.requestPermissions(MainActivity.this, new String[]{Manifest.permission.POST_NOTIFICATIONS}, PERMISSION_REQUEST_CODE);
} else {
compat.notify(1, builder.build());
}
}
}
private void requestPermission() {
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
if (checkSelfPermission(Manifest.permission.VIBRATE) != PackageManager.PERMISSION_GRANTED) {
requestPermissions(new String[]{Manifest.permission.VIBRATE}, PERMISSION_REQUEST_CODE);
} else {
startNotification();
}
} else {
startNotification();
}
}
@Override
public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {
super.onRequestPermissionsResult(requestCode, permissions, grantResults);
if (requestCode == PERMISSION_REQUEST_CODE) {
if (grantResults.length > 0 && grantResults[0] == PackageManager.PERMISSION_GRANTED) {
startNotification();
} else {
// Handle permission denied
}
}
}
}
2条答案
按热度按时间ergxz8rk1#
startNotification()
中存在逻辑错误。compat.areNotificationsEnabled()
总是返回false,如果应用程序没有通知权限!另外,requestPermission()
函数也是不相关的,因为代码已经在startNotification()
中请求了权限。按钮点击监听器不需要调用
requestPermission()
:您可以简化
startNotification()
:我还注意到你用错了
CHANNEL_ID
。此代码将在您每次启动应用程序时创建一个新的通知通道:相反,只需将
CHANNEL_ID
设置为某个常量: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的通知。暂时禁用这些工具并检查通知是否开始出现。