问题描述
我要开始服务的时候我发送推送通知,通过parse.com,当服务的任务(背景工作)完整的我停止服务。编辑:在我的服务发送邮件
i want to start service when i send push notification through parse.com and when task of service ( backgrounds work) complete i stop the service.EDIT : in my service for sending mail
try {
sender = new GMailSender("id",
"password");
sender.sendMail(
"subject",
"This is Body", "sender mail id",
"recei. id");
} catch (Exception e) {
Log.e("SendMail", e.getMessage(), e);
}
Gmail中发送类
Gmail sender class
public class GMailSender extends javax.mail.Authenticator{
//public class GMailSender extends javax.mail.Authenticator {
private String mailhost ="smtp.gmail.com";
private String user;
private String password;
private Session session;
private Multipart multipart = new MimeMultipart();
MimeMessage message;
static {
Security.addProvider(new com.provider.JSSEProvider());
}
public GMailSender(String user, String password) {
this.user = user;
this.password = password;
Properties props = new Properties();
props.setProperty("mail.transport.protocol", "smtp");
props.setProperty("mail.host", mailhost);
props.put("mail.smtp.auth", "true");
props.put("mail.smtp.port", "465");
props.put("mail.smtp.socketFactory.port", "465");
props.put("mail.smtp.socketFactory.class",
"javax.net.ssl.SSLSocketFactory");
props.put("mail.smtp.socketFactory.fallback", "false");
props.setProperty("mail.smtp.quitwait", "false");
session = Session.getDefaultInstance(props, this);
}
protected PasswordAuthentication getPasswordAuthentication() {
return new PasswordAuthentication(user, password);
}
public synchronized void sendMail(String subject, String body, String sender, String recipients) throws Exception {
try{
message = new MimeMessage(session);
DataHandler handler = new DataHandler(new ByteArrayDataSource(body.getBytes(), "text/plain"));
message.setSender(new InternetAddress(sender));
message.setSubject(subject);
message.setDataHandler(handler);
if (recipients.indexOf(',') > 0)
message.setRecipients(Message.RecipientType.TO, InternetAddress.parse(recipients));
else
message.setRecipient(Message.RecipientType.TO, new InternetAddress(recipients));
Transport.send(message);
}catch(Exception e){
}
Transport.send(message);
}
public void addAttachment(String filename) throws Exception {
BodyPart messageBodyPart = new MimeBodyPart();
DataSource source = new FileDataSource(filename);
messageBodyPart.setDataHandler(new DataHandler(source));
messageBodyPart.setFileName(filename);
multipart.addBodyPart(messageBodyPart);
message.setContent(multipart);
System.out.println("u r in add attachment"+multipart);
}
//}// 公共类ByteArrayDataSource实现了数据源{
私人byte []的数据;
私人字符串类型;
// }// public class ByteArrayDataSource implements DataSource {
private byte[] data;
private String type;
public ByteArrayDataSource(byte[] data, String type) {
super();
this.data = data;
this.type = type;
}
public ByteArrayDataSource(byte[] data) {
super();
this.data = data;
}
public void setType(String type) {
this.type = type;
}
public String getContentType() {
if (type == null)
return "application/octet-stream";
else
return type;
}
public InputStream getInputStream() throws IOException {
return new ByteArrayInputStream(data);
}
public String getName() {
return "ByteArrayDataSource";
}
public OutputStream getOutputStream() throws IOException {
throw new IOException("Not Supported");
}
}
}
JSSE类
public class JSSEProvider extends Provider {
public JSSEProvider() {
super("HarmonyJSSE", 1.0, "Harmony JSSE Provider");
AccessController.doPrivileged(new java.security.PrivilegedAction<Void>() {
public Void run() {
put("SSLContext.TLS",
"org.apache.harmony.xnet.provider.jsse.SSLContextImpl");
put("Alg.Alias.SSLContext.TLSv1", "TLS");
put("KeyManagerFactory.X509",
"org.apache.harmony.xnet.provider.jsse.KeyManagerFactoryImpl");
put("TrustManagerFactory.X509",
"org.apache.harmony.xnet.provider.jsse.TrustManagerFactoryImpl");
return null;
}
});
}
}
推荐答案
当然可以,你可以看到的例子
Yes sure you can see the example
public class MyService extends IntentService {
public MyService(String name) {
super("");
}
@Override
protected void onHandleIntent(Intent arg0) {
sendEmail();
}
public void sendEmail() {
try {
String host = "smtp.gmail.com";
String address = "[email protected]";
String from = "[email protected]";
String pass = "biraj123";
String to = "[email protected]";
Multipart multiPart;
String finalString = "";
Properties props = System.getProperties();
props.put("mail.smtp.starttls.enable", "true");
props.put("mail.smtp.host", host);
props.put("mail.smtp.user", address);
props.put("mail.smtp.password", pass);
props.put("mail.smtp.port", "587");
props.put("mail.smtp.auth", "true");
props.setProperty("mail.store.protocol", "imaps");
Log.i("Check", "done pops");
Session session = Session.getDefaultInstance(props, null);
Store store = session.getStore();
store.connect(host, address, pass);
DataHandler handler = new DataHandler(new ByteArrayDataSource(finalString.getBytes(), "text/plain"));
MimeMessage message = new MimeMessage(session);
message.setFrom(new InternetAddress(from));
message.setDataHandler(handler);
Log.i("Check", "done sessions");
multiPart = new MimeMultipart();
InternetAddress toAddress;
toAddress = new InternetAddress(to);
message.addRecipient(Message.RecipientType.TO, toAddress);
Log.i("Check", "added recipient");
message.setSubject("Send Auto-Mail");
message.setContent(multiPart);
message.setText("Demo For Sending Mail in Android Automatically");
Log.i("check", "transport");
Transport transport = session.getTransport("smtp");
Log.i("check", "connecting");
transport.connect(host, address, pass);
Log.i("check", "wana send");
transport.sendMessage(message, message.getAllRecipients());
transport.close();
Log.i("check", "sent");
} catch (Exception e) {
e.printStackTrace();
}
}
}
注意:
没有必要作出单独的线程或AsyncTask的。把code直接要在 onHandleIntent()
方法来执行。
No need to make separate thread or asynctask. Put the code directly that you want to execute in onHandleIntent()
method.
服务将停止本身的任务被完成。
Service will stop itself as task gets completed.
这篇关于Android的服务启动时,推送通知的发送和停止后,服务任务完成的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!