通知不适用于奥利奥

时间:2018-05-02 19:34:40

标签: java android

通知显示在android nougat 7.0及更少但不在Orea 8.0上 我该怎么办? .................................................. .................................................. .................................................. 这是我的代码:

 public class MainActivity extends AppCompatActivity {

Button button;
private final String ChannelId = "Notification";
private final Integer NotificationId = 001;


@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    createNotificationChannel();
}


public void sendNotification (View view) {

    Toast.makeText(this, "Notification", Toast.LENGTH_SHORT).show();


        NotificationCompat.Builder mBuilder = new NotificationCompat.Builder(this, ChannelId);

        Intent i = new Intent(MainActivity.this, Main2Activity.class);
        PendingIntent pendingIntent = PendingIntent.getActivity(this, 0, i, 0);

        mBuilder.setAutoCancel(true);
        mBuilder.setDefaults(NotificationCompat.DEFAULT_ALL);
        mBuilder.setWhen(20000);
        mBuilder.setTicker("Ticker");
        mBuilder.setContentInfo("Info");
        mBuilder.setContentIntent(pendingIntent);
        mBuilder.setSmallIcon(R.drawable.ic_launcher_foreground);
        mBuilder.setContentTitle("New notification title");
        mBuilder.setContentText("Notification text");
        mBuilder.setPriority(NotificationCompat.PRIORITY_DEFAULT);
        mBuilder.setSound(RingtoneManager.getDefaultUri(RingtoneManager.TYPE_NOTIFICATION));

        NotificationManager notificationManager = (NotificationManager) getSystemService(NOTIFICATION_SERVICE);
        notificationManager.notify(2, mBuilder.build());


}

private void createNotificationChannel() {

    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {

    NotificationManager notificationManager = (NotificationManager) getSystemService(NOTIFICATION_SERVICE);
    String channelId = "Notification";
    CharSequence channelName = "Some Channel";
    int importance = NotificationManager.IMPORTANCE_LOW;
    NotificationChannel notificationChannel = new NotificationChannel(channelId, channelName, importance);
    notificationChannel.enableLights(true);
    notificationChannel.setLightColor(Color.RED);
    notificationChannel.enableVibration(true);
    notificationChannel.setVibrationPattern(new long[]{100, 200, 300, 400, 500, 400, 300, 200, 400});
    notificationManager.createNotificationChannel(notificationChannel);
    }
}

}

2 个答案:

答案 0 :(得分:0)

我认为您应该使用通知渠道来创建通知

检查Build.VERSION.SDK_INT> = Build.VERSION_CODES.O然后使用频道

这是我在文档

上找到的一个例子
constructor(props) {
super(props);
this.state = {
timer: 5
};}    

constructor(props) {
super(props);
this.state = { timer: 30 };
}

startTimer = () => {
this.clockCall = setInterval(() => {
this.decrementClock();
 }, 1000);
}

decrementClock = () => {  
this.setState((prevstate) => ({ timer: prevstate.timer-1 }));
};

componentWillUnmount() {
 clearInterval(this.clockCall);
}

}

然后使用构建器构建通知,然后继续正常

答案 1 :(得分:0)

https://developer.android.com/training/notify-user/channels

本文应该是一个很好的指南,根据在Android上实现Notifications的新方法,您需要通过通知渠道

我在实现这个方面遇到了一些困难,尽管有很多例子,但这里有它对我有用:

public class RingtonePlayingService extends Service {

NotificationCompat.Builder notificationBuilder;
NotificationManager notificationManager;
NotificationChannel notificationChannel;
String channelId;
CharSequence channelName;

@Override
public int onStartCommand(Intent intent, int flags, int startId) {

    notificationManager = (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE);
    initNotification();
    showNotification();
    return START_STICKY;
}

private void initNotification() {
    setNotificationChannel();

    notificationBuilder = new NotificationCompat.Builder(getApplicationContext(), notificationChannel.getId());

    // The methods called for building are following my own needs, change them according to yours
    notificationBuilder.setDefaults(Notification.DEFAULT_LIGHTS | Notification.DEFAULT_VIBRATE)
        .setSmallIcon(R.drawable.alarm)
        .setContentTitle("Alarm On!")
        .setContentText("Click the notification to dismiss")
        .setPriority(NotificationCompat.PRIORITY_HIGH)
        // You can add your intents or actions here
        .setAutoCancel(true);
}

private void showNotification() {
    // You can use a unique alarmRequestCode or just use 1 for testing purposes
    notificationManager.notify(alarmRequestCode, notificationBuilder.build());
}

private void setNotificationChannel() {
    channelId = "alarm_channel_id";
    channelName = "alarm_notification_channel";
    int importance = NotificationManager.IMPORTANCE_HIGH;
    notificationChannel = new NotificationChannel(channelId, channelName, importance);
    notificationManager.createNotificationChannel(notificationChannel);
}
}

请注意我删除了if语句,因为我将整个gradle升级为仅适用于新版本。

我删除了您可能不需要的所有代码片段,因此我可以让您更轻松地遵循,所以如果代码对您没有意义,请记住您将需要在中实现你自己的目的和代码!

我希望这会有很好的帮助:)。