当应用未激活时,将接收消息发送到电子邮件

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

在我的项目中,我想将所有接收消息发送到email address。当app打开时,我成功完成了此操作。但是当app关闭时,我无法发送mailapp关闭时,如何检测到消息。我用工人来发送电子邮件。另外,我想将消息数据发送到worker类以发送电子邮件。

工人阶级

public class MessageSenderWorker extends Worker {
    @NonNull
    @Override
    public Result doWork() {
        try {
           new Thread(new Runnable() {
                @Override
                public void run() {
                    GMailSender sender = new GMailSender("emailaddredd",
                            "password");
                    try {
                        sender.sendMail("datafrom mesaage", "datafrom mesaage",
                                "emailaddress", "emailaddress");
                    } catch (Exception e) {
                        e.printStackTrace();
                    }
                }
            }).start();

            return Result.SUCCESS;

        } catch (Exception e) {
            return Result.FAILURE;
        }

    }
}

我的广播接收者

public class MessageReceiver extends BroadcastReceiver {

private static MessageListener mListener;

@Override
public void onReceive(Context context, Intent intent) {

    Bundle data = intent.getExtras();
    Object[] pdus = (Object[]) data.get("pdus");
    for(int i=0; i<pdus.length; i++){
        SmsMessage smsMessage = SmsMessage.createFromPdu((byte[]) pdus[i]);
        String message = "Sender : " + smsMessage.getDisplayOriginatingAddress()
                + "Email From: " + smsMessage.getEmailFrom()
                + "Emal Body: " + smsMessage.getEmailBody()
                + "Display message body: " + smsMessage.getDisplayMessageBody()
                + "Time in millisecond: " + smsMessage.getTimestampMillis()
                + "Message: " + smsMessage.getMessageBody();
        mListener.messageReceived(message);

        NotificationWorker notificationWorker = new NotificationWorker();
        PeriodicWorkRequest.Builder dataCheckBuilder = new PeriodicWorkRequest.Builder(notificationWorker.getClass(), 1, TimeUnit.MINUTES).setConstraints(networkConstraints());
        PeriodicWorkRequest dataCheckWork = dataCheckBuilder.build();
        WorkManager.getInstance().enqueue(dataCheckWork);

    }
}
android broadcastreceiver android-workmanager
2个回答
0
投票

如果用户关闭屏幕,则您只能在30分钟内(根据我的实践)使用AlarmManager最多不超过1次。例如,您可以使用自定义的广播接收器并通过AlarmManager对其进行调用。自定义广播接收器设置了新的警报等。此外,您还必须创建启动广播接收器才能启动警报。


0
投票

由于休眠模式和应用程序待机,要“唤醒”设备,唯一可靠(且对电池友好)是使用高优先级Firebase云消息(FCM)。

您的应用程序随后可以处理此消息,以检索您发送的电子邮件。一种选择是,当您收到FCM时,请排队的工作人员将其下载消息/电子邮件。

其他所有因素都会受到打Do模式和Android中其他电池优化系统的影响。同样,对于这些情况,使用FCM是最省电的解决方案。

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