Android Repeated Notifications not working When App is Closed

和自甴很熟 提交于 2021-02-05 09:14:25

问题


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.

Manifest File

<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);

回答1:


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.

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).

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.



来源:https://stackoverflow.com/questions/64077956/android-repeated-notifications-not-working-when-app-is-closed

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!