簡體   English   中英

如何開始一項活動

[英]How to start an activity

我是 android 開發的新手。 我正在使用 javamail api 制作一個小型 email 客戶端。 我無法找到有關該活動將如何開始的解決方案。 下面是我想要在運行應用程序時啟動的 email 管理器的代碼文件。

我只需要一種方法來開始這個,我真的對 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);  


            }
        } 

這是我的主要內容。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>  

首先,您可能希望在自己的 class 中擁有 email 管理器,因為不必將其擴展為 Activity。 但是,要回答您的問題,您可以查看http://developer.android.com/reference/android/app/Activity.html

這只是一個示例,假設應該啟動另一個活動的活動稱為 MainActivity。 然后把它放在MainActivity中:

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

只需記住將 Email 管理器作為 Activity 放入您的 AndroidManifest.xml

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

可能重復的答案,更多可以在這里找到: 如何在另一個應用程序中啟動活動?

Go 回讀這個: http://developer.android.com/reference/android/app/Activity.ZFC336EZ88A32

不要為您的 EmailManager 擴展 Activity,您不需要這樣做,因為 EmailManager 不與用戶界面交互並且不依賴於任何上下文。

實現一個單獨的 Activity,您可以在其中從 Activity 方法(OnCreate、OnResume 等)調用相關的 EmailManager 方法。順便說一下, OnCreate 是您的 Activity 開始的地方

When you get a better understanding of the lifecycle of android components you are better of moving things from your activity to a service: http://developer.android.com/reference/android/app/Service.html This is again because you have您的 EmailManager 沒有 ui 交互,並且您的 EmailManager 所做的工作類型更適合服務。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM