当应用程序关闭时,Android 重复通知不起作用 [英] Android Repeated Notifications not working When App is Closed

查看:28
本文介绍了当应用程序关闭时,Android 重复通知不起作用的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我想每天在特定时间发送通知.当应用程序打开时,代码正在运行.但是当它关​​闭并删除时,通知没有显示.我为此使用了广播接收器和服务.代码如下.任何人都可以帮助解决这个问题.

I want to send notification everyday on a particular time. The code is working when the app is opened. But when it closed and remove, the notifications are not showing. I have used broadcast receiver and service to this. The code is given below. Can anyone help to clear this issue.

清单文件

<receiver
        android:name=".MyReceiver"
        android:enabled="true"
        android:exported="true" />
<service
        android:name=".MyService"
        android:enabled="true"
        android:exported="true" />

MyReceiver.java

public class MyReceiver extends BroadcastReceiver {

@Override
public void onReceive(Context context, Intent intent) {
    intent = new Intent(context, MyService.class);
    context.startService(intent);
}}

MyService.java

public class MyService extends Service {
@Nullable
@Override
public IBinder onBind(Intent intent) {
    return null;
}

@Override
public int onStartCommand(Intent intent, int flags, int startId) {
    createNotification();
    return Service.START_STICKY;
}

private static final String NOTIFICATION_CHANNEL_ID = "Channel01";
private void createNotification() {
    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
        SharedPreferences preferences = PreferenceManager.getDefaultSharedPreferences(getApplicationContext());
        String name =  preferences.getString("name", "User");
        name = name.split(" ")[0];
        String namee = "Remainder";
        String description = "Remainder to update Wallet";
        int importance = NotificationManager.IMPORTANCE_HIGH;

        NotificationChannel notificationChannel = new NotificationChannel(NOTIFICATION_CHANNEL_ID, namee, importance);
        notificationChannel.setDescription(description);

        Intent notifyIntent = new Intent(getApplicationContext(), MainActivity.class);
        PendingIntent pendingIntent = PendingIntent.getActivity(getApplicationContext(), 1, notifyIntent, 0);

        Notification notification = new Notification.Builder(getApplicationContext())
                .setContentTitle("Remainder")
                .setContentText("Hey " + name + ", Let's update your wallet")
                .setSmallIcon(R.drawable.wallet)
                .setChannelId(NOTIFICATION_CHANNEL_ID)
                .setLargeIcon(BitmapFactory.decodeResource(getApplicationContext().getResources(), R.drawable.wallet_new))
                .setContentIntent(pendingIntent)
                .build();

        NotificationManager notificationManager = (NotificationManager)getApplicationContext().getSystemService(Context.NOTIFICATION_SERVICE);
        notificationManager.createNotificationChannel(notificationChannel);
        // Issue the notification.
        notificationManager.notify(1 , notification);
    }
}}

Activity.java

Intent notifyIntent = new Intent(getApplicationContext(), MyReceiver.class);
PendingIntent pendingIntent = PendingIntent.getBroadcast(getApplicationContext(), 1, notifyIntent, 0);
alarmManager = (AlarmManager) getApplicationContext().getSystemService(Context.ALARM_SERVICE);
alarmManager.setInexactRepeating(AlarmManager.RTC_WAKEUP, timeMilli, timeInterval, pendingIntent);

推荐答案

您不应使用应用程序的任何部分来执行此操作.服务、JobScheduler 或 Work Manager 迟早会被系统杀死以防止电池耗尽.

You shouldn't use any part of application to do that. Services, JobScheduler, or Work Manager sooner or later will be killed by the system to prevent battery drain.

在我看来,发送重复通知的最佳方式是使用由外部 cron 作业触发的 firebase 云消息传递(例如 firebase 函数上的 php).

In my opinion the best way to send repeated notifications is to use firebase cloud messaging triggered with external cron job (e.g. php on firebase functions).

还要确保将通知发送到系统托盘而不是应用程序.为此,请使用 FCM DataMessages.数据消息传送到系统托盘并始终显示 - 即使服务未运行.

Also make sure to deliver the notification to the system tray not to the application. To do that use FCM DataMessages. Data messages are delivered to system tray and are always display - even if service is not running.

这篇关于当应用程序关闭时,Android 重复通知不起作用的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆