亚洲免费在线-亚洲免费在线播放-亚洲免费在线观看-亚洲免费在线观看视频-亚洲免费在线看-亚洲免费在线视频

Android中我為什么發(fā)不了郵件--Android郵件發(fā)送

系統(tǒng) 1823 0

? ? ? ? 版權所有@飛雪無情, 轉載請著名出處: http://flysnow.iteye.com/blog/1128354

?

?

? ? ? Android中我為什么發(fā)不了郵件???我手機里明明有郵件客戶端的,可我為什么不能調用它發(fā)送郵件??? 相信這是很多人會問的問題,手機里有Email客戶端,可是偏偏在自己的應用里調用不了,抑或是不知道怎么調用, 還有的是一直認為自己寫對了,可是偏偏不能調用,無奈之下只能卻網(wǎng)上找段代碼粘貼上,ok,可以了。??墒悄? 知道別人的代碼為什么可以?你知道調用Email是怎么工作的嗎?如果你又像給多人發(fā)郵件,還想發(fā)送附件,怎么做? 又迷糊了吧?所以需要搞懂原理才能一通百通,舉一反三,而這就是這篇博文要寫的,也是你可以在這篇博文中學到的。

?

在這里你可以學到:

?

  1. 什么是Intent和Intent Fileter
  2. 如何發(fā)送Email
  3. 如何發(fā)送特定的標題和內(nèi)容的Emil
  4. 如何發(fā)送給多人
  5. 如何抄送和密送
  6. 如何發(fā)送附件

一:什么是 Intent和Intent Fileter

關于這個詳細介紹請參考 :

Android系列教程之十:Intents and Intent Filters(一)

Android系列教程之十一:Intents and Intent Filters(二) ?

Android系列教程之十二:Intents and Intent Filters(三) ?

二:如何發(fā)送Email

? ? ? ? ? 通過上面就會知道Android應用之間的通信是通過Intent這個東西,如果手機中有實現(xiàn)了你想要功能的應用 那么你就不用麻煩去實現(xiàn)一個拉。直接使用就可以,比如這里的發(fā)送郵件。

我們新建一個工程SendEmail,基于Android1.6實現(xiàn)。然后定義布局文件和代碼如下:

?

    <?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    >
<Button
	android:id="@+id/send_btn"  
    android:layout_width="fill_parent" 
    android:layout_height="wrap_content" 
    android:text="Send Action"
    />
</LinearLayout>
  

?

     /** 發(fā)送郵件測試界面
 * @author 飛雪無情 個人博客:http://flysnow.iteye.com/
 * @since 2011-7-19
 */
public class SendEmailActivity extends Activity implements View.OnClickListener{
	private Button mSendBtn;
    /** Called when the activity is first created. */
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        mSendBtn=(Button)findViewById(R.id.send_btn);
        mSendBtn.setOnClickListener(this);
    }
	@Override
	public void onClick(View v) {
		switch(v.getId()){
		case R.id.send_btn:
			startSendEmailIntent();
			break;
		}
	}
	private void startSendEmailIntent(){
		Intent data=new Intent(Intent.ACTION_SENDTO);
		data.setData(Uri.parse("mailto:qq10000@qq.com"));
		data.putExtra(Intent.EXTRA_SUBJECT, "這是標題");
		data.putExtra(Intent.EXTRA_TEXT, "這是內(nèi)容");
		startActivity(data);
	}
}
  

? ? 這是我們運行應用,點擊按鈕就會看到如下效果:

?


Android中我為什么發(fā)不了郵件--Android郵件發(fā)送詳解
Android中我為什么發(fā)不了郵件--Android郵件發(fā)送詳解

三:分析發(fā)送代碼?

主要的發(fā)送代碼如下:

?

    Intent data=new Intent(Intent.ACTION_SENDTO);
data.setData(Uri.parse("mailto:qq10000@qq.com"));
data.putExtra(Intent.EXTRA_SUBJECT, "這是標題");
data.putExtra(Intent.EXTRA_TEXT, "這是內(nèi)容");
startActivity(data);
  
  1. ?首先構造一個Action為SENDTO的Action
  2. 其次創(chuàng)建一個Uri,他是一個mailto的郵件鏈接,也就是接收地址.
  3. 再通過Intent.EXTRA_SUBJECT和Intent.EXTRA_TEXT傳遞標題和文本的數(shù)據(jù),記住,一定要使用這些常量,這是標準,否則Email客戶端不認識,那樣你傳遞的標題和文本就不起作用了。
  4. 然后就是startActivity進行打開,系統(tǒng)會根據(jù)Intent自動匹配找到能處理這個intent的應用,如圖列表,有很多個,我們這里選擇網(wǎng)易掌上郵,就打開了一個郵件發(fā)送界面,如我們所愿,郵件地址、標題和內(nèi)容都在了,很成功.
  5. intent中的數(shù)據(jù)傳遞是以Extra的方式進行put后傳遞的,然后在使用的時候getter取出使用。

四:發(fā)送給多人以及抄送和密送

發(fā)送給多人以及抄送和密送都很簡單,查找Intent類中的Extra常量,發(fā)送有這么三個常量:Intent.EXTRA_EMAIL,Intent.EXTRA_CC,Intent.EXTRA_BCC。這三個分別用于傳遞“接受人地址列表”、“抄送人地址列表”和“密送人地址列表”,傳遞的都是String[]類型的Email地址,如果數(shù)組中有多個地址,就可以發(fā)送給多人。發(fā)送的函數(shù)修改如下,我們看下效果:

?

    private void startSendEmailIntent(){
		Intent data=new Intent(Intent.ACTION_SENDTO);
		data.setData(Uri.parse("mailto:qq10000@qq.com"));
		data.putExtra(Intent.EXTRA_EMAIL, new String[]{"ls8707@163.com","ls8708@163.com"});
		data.putExtra(Intent.EXTRA_CC, new String[]{"ls8709@163.com"});
		data.putExtra(Intent.EXTRA_BCC, new String[]{"ls810@163.com"});
		data.putExtra(Intent.EXTRA_SUBJECT, "這是標題");
		data.putExtra(Intent.EXTRA_TEXT, "這是內(nèi)容");
		startActivity(data);
	}
  


Android中我為什么發(fā)不了郵件--Android郵件發(fā)送詳解

五,發(fā)送附件

Email'客戶端的發(fā)送Activity提供了兩個Intent Filter,一個用于發(fā)送普通郵件,一個用戶發(fā)送帶有附件的郵件。 區(qū)分很很容易的,發(fā)送普通郵件的那個Intent Filter配置的Action SENDTO,而帶有附件的郵件則是SEND,所以是2個不一樣,但是哪些比如附加“標題”,“內(nèi)容”,“抄送”,“發(fā)送多人”等等還是通用的。 布局文件新增一個按鈕,用于發(fā)送帶有附件的郵件,Activity代碼也做修改。

?

    <Button
	android:id="@+id/send_to_btn"  
    android:layout_width="fill_parent" 
    android:layout_height="wrap_content" 
    android:text="SendTo Action"/>
  
?
     /* * 發(fā)送郵件測試界面
 * @author 飛雪無情 個人博客:http://flysnow.iteye.com/
 * @since 2011-7-19
 */
public class SendEmailActivity extends Activity implements View.OnClickListener{
	private Button mSendBtn;
	private Button mSendToBtn;
    /** Called when the activity is first created. */
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        mSendBtn=(Button)findViewById(R.id.send_btn);
        mSendToBtn=(Button)findViewById(R.id.send_to_btn);
        mSendBtn.setOnClickListener(this);
        mSendToBtn.setOnClickListener(this);
    }
	@Override
	public void onClick(View v) {
		switch(v.getId()){
		case R.id.send_btn:
			startSendEmailIntent();
			break;
		case R.id.send_to_btn:
			startSendToEmailIntent();
			break;
		}
	}
	private void startSendEmailIntent(){
		Intent data=new Intent(Intent.ACTION_SENDTO);
		data.setData(Uri.parse("mailto:qq10000@qq.com"));
		data.putExtra(Intent.EXTRA_EMAIL, new String[]{"ls8707@163.com","ls8708@163.com"});
		data.putExtra(Intent.EXTRA_CC, new String[]{"ls8709@163.com"});
		data.putExtra(Intent.EXTRA_BCC, new String[]{"ls810@163.com"});
		data.putExtra(Intent.EXTRA_SUBJECT, "這是標題");
		data.putExtra(Intent.EXTRA_TEXT, "這是內(nèi)容");
		startActivity(data);
	}
	private void startSendToEmailIntent(){
		Intent data=new Intent(Intent.ACTION_SEND);
		data.putExtra(Intent.EXTRA_EMAIL, new String[]{"ls8707@163.com"});
		data.putExtra(Intent.EXTRA_SUBJECT, "這是標題");
		data.putExtra(Intent.EXTRA_TEXT, "這是內(nèi)容");
		data.putExtra(Intent.EXTRA_STREAM, Uri.parse(""));
		data.setType("text/plain");
		startActivity(data);
	}
}
  

?運行應用,我們看到效果圖里最小面的附件標識,說明已經(jīng)可以發(fā)送附件了.


Android中我為什么發(fā)不了郵件--Android郵件發(fā)送詳解

?

發(fā)送附件最重要的就是Action必須為SEND,type一定要設置setType(""),還要為Intent.EXTRA_STREAM賦值,類型為Uri,一個附件的Uri。這樣才能發(fā)送附件。

六,客戶端Email應用的發(fā)送Activity配置

? ? ? ? ? ?這是Android1.6自帶Email客戶端的配置,如下:

?

?

    <activity
            android:name=".activity.MessageCompose"
            android:label="@string/app_name"
            android:enabled="false"
            >
            <intent-filter>
                <action android:name="android.intent.action.VIEW" />
                <action android:name="android.intent.action.SENDTO" />
                <data android:scheme="mailto" />
                <category android:name="android.intent.category.DEFAULT" />
                <category android:name="android.intent.category.BROWSABLE" />
            </intent-filter>
            <intent-filter android:label="@string/app_name">
                <action android:name="android.intent.action.SEND" />
                <data android:mimeType="text/plain" />
                <data android:mimeType="image/*" />
                <data android:mimeType="video/*" />
                <category android:name="android.intent.category.DEFAULT" />
            </intent-filter>
        </activity>
  

?從以上代碼總結:

?

  1. 一個Activity定義了2個Intent Filter用于發(fā)送不同類型郵件。
  2. SENDTO發(fā)送普通郵件,SEND可以發(fā)送普通和帶有附件的,不過最好主要用于發(fā)送附件。
  3. 使用SENDTO時,必須為Intent設置Data,也就是Uri,內(nèi)容為"mailto:emailaddr",否則不能匹配,因為有schema必須為mailto的限制
  4. 使用SEND時必須要設置type,也就是使用setType()方法,type只能為以前xml定義的4個。不過我測試了text/*也可以,其他的沒測試.
  5. 發(fā)送附件只能使用SEND這個Action.



附加Email客戶端中提取Email地址,抄送,標題,附件等信息的源代碼分析.
      void initFromIntent(Intent intent) {
        
        //提取接受人地址列表
        String[] extraStrings = intent.getStringArrayExtra(Intent.EXTRA_EMAIL);
        if (extraStrings != null) {
            addAddresses(mToView, extraStrings);
        }
//提取抄送人地址列表
        extraStrings = intent.getStringArrayExtra(Intent.EXTRA_CC);
        if (extraStrings != null) {
            addAddresses(mCcView, extraStrings);
        }
//提取密送人地址列表
        extraStrings = intent.getStringArrayExtra(Intent.EXTRA_BCC);
        if (extraStrings != null) {
            addAddresses(mBccView, extraStrings);
        }
//提取標題
        String extraString = intent.getStringExtra(Intent.EXTRA_SUBJECT);
        if (extraString != null) {
            mSubjectView.setText(extraString);
        }

        //提取Uri中的接受人地址
        final Uri dataUri = intent.getData();
        if (dataUri != null) {
            if ("mailto".equals(dataUri.getScheme())) {
                initializeFromMailTo(dataUri.toString());
            } else {
                String toText = dataUri.getSchemeSpecificPart();
                if (toText != null) {
                    addAddresses(mToView, toText.split(","));
                }
            }
        }

       //提取郵件內(nèi)容
        
        CharSequence text = intent.getCharSequenceExtra(Intent.EXTRA_TEXT);
        if (text != null) {
            mMessageContentView.setText(text);
        }
        
      //提取附件,可以看出Action必須是SEND.EXTRA_STREAM中有數(shù)據(jù)
     //type不能為null,這樣才能提取倒附件.
        
        if (Intent.ACTION_SEND.equals(intent.getAction()) && intent.hasExtra(Intent.EXTRA_STREAM)) {
            String type = intent.getType();
            Uri stream = (Uri) intent.getParcelableExtra(Intent.EXTRA_STREAM);
            if (stream != null && type != null) {
                if (MimeUtility.mimeTypeMatches(type, Email.ACCEPTABLE_ATTACHMENT_SEND_TYPES)) {
                    addAttachment(stream);
                }
            }
        }
        
        // Finally - expose fields that were filled in but are normally hidden, and set focus
        
        if (mCcView.length() > 0) {
            mCcView.setVisibility(View.VISIBLE);
        }
        if (mBccView.length() > 0) {
            mBccView.setVisibility(View.VISIBLE);
        }
        setNewMessageFocus();
        mDraftNeedsSaving = false;
    }
    
?

Android中我為什么發(fā)不了郵件--Android郵件發(fā)送詳解


更多文章、技術交流、商務合作、聯(lián)系博主

微信掃碼或搜索:z360901061

微信掃一掃加我為好友

QQ號聯(lián)系: 360901061

您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點擊下面給點支持吧,站長非常感激您!手機微信長按不能支付解決辦法:請將微信支付二維碼保存到相冊,切換到微信,然后點擊微信右上角掃一掃功能,選擇支付二維碼完成支付。

【本文對您有幫助就好】

您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描上面二維碼支持博主2元、5元、10元、自定義金額等您想捐的金額吧,站長會非常 感謝您的哦!?。?/p>

發(fā)表我的評論
最新評論 總共0條評論
主站蜘蛛池模板: 国产成+人+亚洲+欧美综合 | 天天天天操 | 一级a级毛片 | 欧洲在线免费视频 | 国产尤物福利视频在线观看 | 欧美日韩第二页 | 99精品视频在线成人精彩视频 | 四虎影院黄色片 | 亚洲国产人成在线观看69网站 | 精品69久久久久久99 | 天堂素人在线 | 久久综合性 | jizz中国女人 | 香蕉视频免费在线看 | 欧美亚洲免费 | 国产美女一级视频 | 亚洲欧美在线精品一区二区 | 欧美老妇69交 | 777精品成人影院 | 精品久久天干天天天按摩 | 九九精品视频一区在线 | 免费国产福利 | 成人精品mv视频在线观看 | 成人短视频网站 | 久久网站在线观看 | 特级aav毛片日本免费视频 | 亚洲精品一二三区 | 久艾草国产成人综合在线视频 | 国产日韩在线看 | 国产在线拍揄自揄视频不卡99 | 奇米777me| 亚洲精品高清久久 | h片网站在线观看 | 国产精品久久久久久久成人午夜 | 午夜精品久久久久久久99 | 国产成人一区二区三中文 | 九九影视理论片在线播放 | 97久久精品人人做人人爽 | 国产一区二区在线播放 | 久久精品免费观看久久 | a级毛片免费 |