要自动发送的JavaMail问题
我目前正试图让AlarmReceiver在DatePicker/TimePicker触发时发送电子邮件。现在,它已经成功地向移动设备发送推送通知。我还知道SendMail方法在另一个项目中工作 这应该是可行的,但我看不出在调用AlarmReceiver类后触发SendMail方法的代码有任何问题 任何帮助都将不胜感激!谢谢大家! Alarm.java要自动发送的JavaMail问题,java,android,alarmmanager,Java,Android,Alarmmanager,我目前正试图让AlarmReceiver在DatePicker/TimePicker触发时发送电子邮件。现在,它已经成功地向移动设备发送推送通知。我还知道SendMail方法在另一个项目中工作 这应该是可行的,但我看不出在调用AlarmReceiver类后触发SendMail方法的代码有任何问题 任何帮助都将不胜感激!谢谢大家! Alarm.java package com.example.pc.achieve; import java.util.Calendar; import andro
package com.example.pc.achieve;
import java.util.Calendar;
import android.content.DialogInterface;
import android.os.Bundle;
import android.app.Activity;
import android.app.AlarmManager;
import android.app.PendingIntent;
import android.content.Context;
import android.content.Intent;
import android.support.v7.app.AlertDialog;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.DatePicker;
import android.widget.TextView;
import android.widget.TimePicker;
import android.widget.Toast;
public class Alarm extends Activity{
DatePicker pickerDate;
TimePicker pickerTime;
Button buttonSetAlarm;
TextView info;
private PendingIntent pendingIntent;
final static int RQS_1 = 1;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_alarm);
info = (TextView)findViewById(R.id.info);
pickerDate = (DatePicker)findViewById(R.id.pickerdate);
pickerTime = (TimePicker)findViewById(R.id.pickertime);
Calendar now = Calendar.getInstance();
pickerDate.init(
now.get(Calendar.YEAR),
now.get(Calendar.MONTH),
now.get(Calendar.DAY_OF_MONTH),
null);
pickerTime.setCurrentHour(now.get(Calendar.HOUR_OF_DAY));
pickerTime.setCurrentMinute(now.get(Calendar.MINUTE));
buttonSetAlarm = (Button)findViewById(R.id.setalarm);
buttonSetAlarm.setOnClickListener(new OnClickListener(){
@Override
public void onClick(View arg0) {
Calendar current = Calendar.getInstance();
Calendar cal = Calendar.getInstance();
cal.set(pickerDate.getYear(),
pickerDate.getMonth(),
pickerDate.getDayOfMonth(),
pickerTime.getCurrentHour(),
pickerTime.getCurrentMinute(),
00);
if(cal.compareTo(current) <= 0){
//The set Date/Time already passed
Toast.makeText(getApplicationContext(),
"Date/Time Has Already Passed!",
Toast.LENGTH_LONG).show();
}else {
setAlarm(cal);
}
}});
}
private void setAlarm(Calendar targetCal){
Intent intent = new Intent(getBaseContext(), AlarmReceiver.class);
final int _id = (int) System.currentTimeMillis();
PendingIntent pendingIntent = PendingIntent.getBroadcast(this, _id, intent,PendingIntent.FLAG_ONE_SHOT);
AlarmManager alarmManager = (AlarmManager)getSystemService(Context.ALARM_SERVICE);
alarmManager.set(AlarmManager.RTC_WAKEUP, targetCal.getTimeInMillis(), pendingIntent);
AlertDialog.Builder builder = new AlertDialog.Builder(this);
builder.setMessage("Your alarm for this deadline has now been set for " + targetCal.getTime())
.setCancelable(false)
.setPositiveButton("OK", new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int id) {
finish();
}
});
AlertDialog alert = builder.create();
alert.show();
}
}
package com.example.pc.reach;
导入java.util.Calendar;
导入android.content.DialogInterface;
导入android.os.Bundle;
导入android.app.Activity;
导入android.app.AlarmManager;
导入android.app.pendingent;
导入android.content.Context;
导入android.content.Intent;
导入android.support.v7.app.AlertDialog;
导入android.view.view;
导入android.view.view.OnClickListener;
导入android.widget.Button;
导入android.widget.DatePicker;
导入android.widget.TextView;
导入android.widget.TimePicker;
导入android.widget.Toast;
公共类警报扩展活动{
日期选择器选择器日期;
时间选择器选择时间;
按钮,按钮,扶手;
文本视图信息;
私人吊挂帐篷;
最终静态整数RQS_1=1;
@凌驾
创建时受保护的void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_报警);
info=(TextView)findViewById(R.id.info);
pickerDate=(日期选择器)findViewById(R.id.pickerDate);
pickerTime=(TimePicker)findviewbyd(R.id.pickerTime);
Calendar now=Calendar.getInstance();
pickerDate.init(
现在。获取(日历。年份),
现在。获取(日历。月份),
现在。获取(日历。每月的第天),
无效);
pickerTime.setCurrentHour(now.get(Calendar.HOUR OF_DAY));
setCurrentMinute(now.get(Calendar.MINUTE));
buttonSetAlarm=(按钮)findViewById(R.id.setalarm);
setOnClickListener(新的OnClickListener(){
@凌驾
公共void onClick(视图arg0){
当前日历=Calendar.getInstance();
Calendar cal=Calendar.getInstance();
校准集(pickerDate.getYear(),
pickerDate.getMonth(),
pickerDate.getDayOfMonth(),
pickerTime.getCurrentHour(),
pickerTime.getCurrentMinute(),
00);
如果(校准比较)到(当前)广播接收器执行可能很快
最好您启动发送电子邮件的意向服务。谢谢您的回复。因此,此执行可能太快了?我希望在触发警报时自动发送电子邮件,是否不可能以这种方式完成?OnClick可在单独的项目中使用此方法,并立即发送电子邮件。我的意思是inst在使用AsyncTask之前,您可以使用将要运行的Intent服务 在后台进程中,但AsyncTask可能不是。啊,我明白了,我还是java新手,不确定如何将此方法更改为使用intent service而不是AsyncTask?谢谢您的帮助!