2011-07-07 46 views
0

我是新來的android開發。我正在使用javamail api製作一個小型的電子郵件客戶端。我無法找到該活動將如何開始的解決方案。下面是我的電子郵件管理器的代碼文件,我想在運行應用程序時啓動它。如何開始一個活動

我只是需要一種方法來啓動這一點,我對Android的活動真的很困惑,並有線索如何實現它們 感謝提前:)

package com.mailtest.android; 

import android.app.Activity; 
import android.os.Bundle; 
import java.util.Properties; 
import javax.activation.DataHandler; 
import javax.mail.Folder; 
import javax.mail.Message; 
import javax.mail.MessagingException; 
import javax.mail.Session; 
import javax.mail.Store; 
import javax.mail.Transport; 
import javax.mail.internet.InternetAddress; 
import javax.mail.internet.MimeMessage; 
import android.view.View; 
import android.os.Bundle; 
import android.content.Intent; 
import android.widget.Button; 

public class EmailManager extends Activity { 


    **/** Called when the activity is first created. */ 
    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.main);** 
    } 
    private String stmpHost = "smtp.gmail.com"; 
     private String mailServer = "imap.gmail.com"; 
     private EmailAccount account; 
     private Session smtpSession; 
     private Session imapSession; 
     private Folder inbox; 
     private Store store; 



     public EmailManager(String username, String password, String urlServer, String stmpHost, String mailServer) { 
      account = new EmailAccount(username, password, urlServer); 
      this.stmpHost = stmpHost; 
      this.mailServer = mailServer; 
      initProtocol(); 
     } 
     private void initProtocol() { 
      EmailAuthenticator authenticator = new EmailAuthenticator(account); 

      Properties props1 = new Properties(); 
      props1.setProperty("mail.transport.protocol", "smtps"); 
      props1.setProperty("mail.host", stmpHost); 
      props1.put("mail.smtp.auth", "true"); 
      props1.put("mail.smtp.port", "465"); 
      props1.put("mail.smtp.socketFactory.port", "465"); 
      props1.put("mail.smtp.socketFactory.class", "javax.net.ssl.SSLSocketFactory"); 
      props1.put("mail.smtp.socketFactory.fallback", "false"); 
      props1.setProperty("mail.smtp.quitwait", "false"); 
      smtpSession = Session.getDefaultInstance(props1, authenticator); 

      Properties props2 = new Properties(); 
      props2.setProperty("mail.store.protocol", "imaps"); 
      props2.setProperty("mail.imaps.host", mailServer); 
      props2.setProperty("mail.imaps.port", "993"); 
      props2.setProperty("mail.imaps.socketFactory.class", "javax.net.ssl.SSLSocketFactory"); 
      props2.setProperty("mail.imaps.socketFactory.fallback", "false"); 
      imapSession = Session.getInstance(props2); 
     } 
     public Message[] getMails() throws MessagingException { 
      store = imapSession.getStore("imaps"); 
      store.connect(mailServer, account.username, account.password); 
      inbox = store.getFolder("Inbox"); 
      inbox.open(Folder.READ_ONLY); 
      Message[] result = inbox.getMessages(); 

      return result; 
     } 
     public void close() { 
      //Close connection 
      try { 
       inbox.close(false); 
       store.close(); 
      } catch (Exception e) { 
       // TODO Auto-generated catch block 
       e.printStackTrace(); 
      }  
     } 
     public synchronized void sendMail(String subject, String body, String sender, String recipients) throws Exception { 
      MimeMessage message = new MimeMessage(smtpSession); 
      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); 


      } 
     } 

,這是我的main.xml

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:orientation="vertical" 
    android:layout_width="fill_parent" 
    android:layout_height="fill_parent" 
    > 
<TextView 
    android:layout_width="fill_parent" 
    android:layout_height="wrap_content" 
    android:text="@string/hello" 
    /> 

</LinearLayout> 
+0

我建議你不要在這個類中擴展Activity。 – iTurki

+0

Dupe? http://stackoverflow.com/questions/2209513/how-to-start-activity-in-another-application –

回答

0

首先,您可能希望將電子郵件管理器放在自己的班級中,因爲不需要將其作爲活動擴展。但是,要回答你的問題,你可以看看http://developer.android.com/reference/android/app/Activity.html

這只是一個例子,我們假設應該啓動其他活動的活動稱爲MainActivity。 然後把這個MainActivity:

startActivity(new Intent(MainActivity.this, EmailManager.class)); 

只要記得把電子郵件管理器作爲活動中的AndroidManifest.xml

<activity android:name=".EmailManager"/> 

可能重複的答案,更可以在這裏找到:How to start activity in another application?

0

回去讀這個:http://developer.android.com/reference/android/app/Activity.html

不要擴展你的EmailManager的活動,你做不需要,因爲EmailManager不會與用戶界面進行交互,也不依賴於任何上下文。

在您的活動的方式

開始當你得到一個更好的理解實現,你調用從活動的方法(在OnCreate,的onResume等)的OnCreate是相關EmailManager方法單獨活動android組件的生命週期您更好地將活動從活動轉移到服務:http://developer.android.com/reference/android/app/Service.html 這又是因爲您的EmailManager沒有用戶界面交互,並且您的EmailManager所做的工作類型更適合服務。