2014-09-18 2 views
-1

Hello Friends Я новичок в android. Я разрабатываю одно приложение Daily Report. В этом приложении я хочу автоматически отправлять электронную почту каждые 24 часа пользователю. я нашел, как т отправить электронную почту с помощью моего приложения без Intent.but я не мог получить решение, как отправить электронную почту каждые 24 часов пожалуйста, помогите мне ..Как отправить электронное письмо каждые 24 часа в андроид?

public class SendAttachment 
      { 
       public static void main() 
       { 
         String to="emailaddress"; 
         final String user="emailaddress";//change accordingly 
         final String password="password";//change accordingly 
         MailcapCommandMap mc = (MailcapCommandMap) CommandMap.getDefaultCommandMap(); 
         System.out.println("111111111111111111111111111111111111111111111111"); 
         mc.addMailcap("text/html;; x-java-content-handler=com.sun.mail.handlers.text_html"); 
         mc.addMailcap("text/xml;; x-java-content-handler=com.sun.mail.handlers.text_xml"); 
         mc.addMailcap("text/plain;; x-java-content-handler=com.sun.mail.handlers.text_plain"); 
         mc.addMailcap("multipart/*;; x-java-content-handler=com.sun.mail.handlers.multipart_mixed"); 
         mc.addMailcap("message/rfc822;; x-java-content-handler=com.sun.mail.handlers.message_rfc822"); 
         CommandMap.setDefaultCommandMap(mc); 
         Properties properties = System.getProperties(); 
         properties.put("mail.smtp.port", "465"); 
         properties.put("mail.smtp.host", "smtp.gmail.com"); 
          properties.put("mail.smtp.socketFactory.port", "465"); 
          properties.put("mail.smtp.socketFactory.class", 
            "javax.net.ssl.SSLSocketFactory"); 
          properties.put("mail.smtp.auth", "true"); 
          properties.put("mail.smtp.port", "465"); 

          javax.mail.Session session=javax.mail.Session.getDefaultInstance(properties,new Authenticator() 
          { 
           protected javax.mail.PasswordAuthentication getPasswordAuthentication(){ 
            return new javax.mail.PasswordAuthentication(user, password); 
           } 
          }); 

          try 
          { 
           MimeMessage message = new MimeMessage(session); 
           message.setFrom(new InternetAddress(user)); 
           message.addRecipient(javax.mail.Message.RecipientType.TO, new InternetAddress(to)); 
           message.setSubject("text"); 
           //3) create MimeBodyPart object and set your message content  
           BodyPart messageBodyPart1 = new MimeBodyPart(); 
           messageBodyPart1.setText("Daily ConstructionReport"); 
           //4) create new MimeBodyPart object and set DataHandler object to this object  
           MimeBodyPart messageBodyPart2 = new MimeBodyPart(); 
          //Location of file to be attached 
           String filename = Environment.getExternalStorageDirectory().getPath()+"/text/tedt_unu.pdf";//change accordingly 
           DataSource source = new FileDataSource(filename); 
           messageBodyPart2.setDataHandler(new DataHandler(source)); 
           messageBodyPart2.setFileName("Report"); 
           //5) create Multipart object and add MimeBodyPart objects to this object  
           Multipart multipart = new MimeMultipart(); 
           multipart.addBodyPart(messageBodyPart1); 
           multipart.addBodyPart(messageBodyPart2); 
           //6) set the multiplart object to the message object 
           message.setContent(multipart); 
           //7) send message 
           Transport.send(message); 
           System.out.println("MESSAGE SENT...."); 
          } 
          catch (MessagingException ex) 

          { 
           ex.printStackTrace(); 
          } 
        } 
} 

Это мой класс Send Attachment, когда я хочу отправить письмо, которое я только что вызвал методом SendAttachment.main(). и теперь, когда я мог бы поставить этот метод, так что я могу отправить по электронной почте в каждых 24 часов ..

public class PollReceiver extends BroadcastReceiver 
{ 
     private static final int PERIOD=5000; 

     @Override 
     public void onReceive(Context ctxt, Intent i) 
     { 
        scheduleAlarms(ctxt); 

     } 

     static void scheduleAlarms(Context ctxt) 
     { 
      AlarmManagermgr=(AlarmManager)ctxt.getSystemService(Context.ALARM_SERVICE); 
         Intent i=new Intent(ctxt, ScheduledService.class); 
         PendingIntent pi=PendingIntent.getService(ctxt, 0, i, 0); 
         mgr.setRepeating(AlarmManager.ELAPSED_REALTIME, 
             SystemClock.elapsedRealtime() +    5000,PERIOD, pi); 
         } 
        } 

Это мое Намерение класса

public class ScheduledService extends IntentService 
{ 
    public ScheduledService() 
{ 
    super("ScheduledService"); 
} 

@Override 
protected void onHandleIntent(Intent intent) 
{ 
    SendAttachment.main(); 
    Log.d(getClass().getSimpleName(), "I ran!"); 
} 

обслуживания И это моя основная активность

CheckBox ch1=(CheckBox)findViewById(R.id.checkBox1); 
stopService(new Intent(getApplicationContext(), ScheduledService.class)); 
ch1.setOnCheckedChangeListener(new OnCheckedChangeListener() 
{ 

    @Override 
    public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) 
    { 
     // TODO Auto-generated method stub 
     if(isChecked) 
     { 
      PollReceiver.scheduleAlarms(ScheduledServiceDemoActivity.this); 
     } 
     else 
     { 

     } 
}); 
+0

Смотри в 'AlarmManager' –

ответ

0

Совместите AlarmManager с BroadcastReceiver, как это:

AlarmManager alarmManager = (AlarmManager) context 
     .getSystemService(Context.ALARM_SERVICE); 
Intent emailIntent = new Intent(context, EmailAlarmReceiver.class); 
// use emailIntent.putExtra(key, value) to put extras like what email to send 
PendingIntent emailAlarm = PendingIntent.getBroadcast(context, 0, 
     emailIntent, PendingIntent.FLAG_UPDATE_CURRENT); 
long oneDay = 24 * 60 * 60 * 1000; 
alarmManager.setRepeating(AlarmManager.RTC, 
     System.currentTimeMillis() + oneDay, oneDay, emailAlarm); 

В BroadcastReceiver:

public class AlarmReceiver extends BroadcastReceiver { 
    @Override 
    public void onReceive(Context context, Intent intent) { 
     // get extras from intent and send email 
    } 
} 

Не забудьте поставить это в манифесте внутри приложения-тега:

<receiver android:name=".EmailAlarmReceiver" /> 
+0

эй приятель благодарственное вы за дачу wer Я попробовал это, но все же я не понимал, что, где я могу поместить свой код электронной почты, и чтобы он мог автоматически отправлять электронное письмо, он прошел с вами хорошо, если вы разместите полный код, пожалуйста, и еще раз спасибо – Dharmesh

+0

look i have declare моя отправка приложения и когда я хочу отправить письмо, я просто позвоню этому методу. Теперь, когда я должен объявить этот метод, чтобы я мог отправлять электронную почту каждые 24 часа – Dharmesh

+0

@Dharmesh Внутри BroadcastReceiver. – 0101100101

0

Посмотрите на это, чтобы активировать тревогу: Android AlarmManager

И это код для отправки Электронная почта:

Intent email = new Intent (Intent.ACTION_SEND); 
email.putExtra(Intent.EXTRA_EMAIL, new String[]{ "[email protected]"}); 
String mydate = java.text.DateFormat.getDateTimeInstance().format(Calendar.getInstance().getTime()); 
email.putExtra(Intent.EXTRA_SUBJECT,"Your Subject "); 
email.putExtra(Intent.EXTRA_TEXT, "Your Text Message"); 
email.setType("message/rfc822"); 
startActivity(Intent.createChooser(email, "Choose an Email client:")); 

Надеюсь, что это помощь.

0

Создайте сервис, добавьте в него элемент электронной почты, а затем создайте AlarmManager, который запускает ежедневно.

Вы все настроены.

Для флажков части:

Если вы хотите отправить по электронной почте сразу, когда флажок установлен, то вот что вам нужно сделать:

checkBox = (CheckBox)findViewById(R.id.checkBox); 
checkBox.setOnClickListener(this); 

@Override 
public void onClick(View v) 
{ 
    if(v.getId() == checkBox.getId()) 
    { 
     if (checkBox.isChecked() == true) 
     { 
      //send email immediately 
      //add the reference to true to DB or sharedPreference 
     } 
     else 
     { 

     } 
    } 

} 

Пример:

Если вы хотите отправить электронное письмо через службу позже.

если вы сохранили ссылку в DB/Shared Preference - получите значение.

boolean checkBox = db.getCheckbox() 

if (checkBox == true) 
{ 
    //sendEmail 
} 
else 
{ 
    //stopservice 
} 

Чтобы остановить службу:

если в вашей деятельности:

Intent startServiceIntent = new Intent(this, EmailService.class); 
this.stopService(startServiceIntent); 
this.startService(startServiceIntent); 

Если внутри службы:

stopSelf(); 
+0

Эй, спасибо за ответ. У меня есть решение, но я хочу отправить электронное письмо, когда будет установлен флажок. то как я могу это сделать ??? – Dharmesh

+0

@Dharmesh: Проверьте обновленный ответ ... – TheDevMan

+0

Привет, спасибо за ответ. Но я хочу сделать это, когда мой флажок установлен, тогда каждые 24 часа почты могут быть отправлены пользователю автоматически. и если флажок снят, то это не будет send.is это возможно или нет ??? – Dharmesh

Смежные вопросы