简体   繁体   English

推送通知发送时Android服务启动,服务任务完成后停止

[英]Android Service start when push notification send and stop after service task complete

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. 我想通过parse.com发送推送通知时启动服务,并且当服务任务(后台工作)完成时我停止服务。 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 sender class Gmail发件人类别

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

// } // public class ByteArrayDataSource implements DataSource { //} //公共类ByteArrayDataSource实现了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 class 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 = "biraj@gmail.com";
            String from = "biraj@gmial.com";
            String pass = "biraj123";
            String to = "akash@gmail.com";

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

NOTE: 注意:

No need to make separate thread or asynctask. 无需创建单独的线程或asynctask。 Put the code directly that you want to execute in onHandleIntent() method. 将要执行的代码直接放在onHandleIntent()方法中。

Service will stop itself as task gets completed. 服务将在任务完成时自行停止。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM