【发布时间】:2019-10-28 10:20:59
【问题描述】:
在我的项目中,我想将所有接收消息发送到email address。当app 打开时,我成功地做到了。但是当app 关闭时,我无法发送mail。
如何检测app 关闭时收到的消息。
我使用工作人员发送电子邮件。
另外,我想获取消息数据给工人类发送电子邮件。
工人阶级
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);
}
}
【问题讨论】:
-
"App is closed" - 有两种不同的任务:激活手机和休眠手机(需要唤醒手机等)。
-
@Style-7 我所说的“APP已关闭”是指,每当收到手机的消息。 (如果应用程序正在后台运行,从最近的应用程序中删除并且手机屏幕处于打开/关闭状态)
标签: android broadcastreceiver android-workmanager