前言
我從2014年開始接觸Android開發(fā),作為一個非科班出身的女程序員,我在android這條道上已經(jīng)走了3年。三年中,參加了大大小小快10個項目。經(jīng)歷了種種的坑,在不停學(xué)習(xí)的同時,我想自己應(yīng)該把這些我與Android的事情寫下來。用我自己的經(jīng)歷,解決大家一些問題。同時,如果有更好的解決方法,希望大家能夠提出來,一起學(xué)習(xí)。
如何從自己的應(yīng)用打開郵箱
現(xiàn)在的公司是一個日企,很多需求和國內(nèi)有很大的不同,比如說UI,日本喜歡可愛的畫面,每個頁面都是填充的滿滿的;比如說功能設(shè)計;比如說習(xí)慣操作和我們有很多不一樣等等。這給我?guī)砹撕芏嗫鄲馈_@些都將在后面慢慢的和大家介紹。
現(xiàn)在的項目需要從自己的應(yīng)用打開郵箱。這是一個很簡單的功能,相信很多朋友都做過通過自己的app發(fā)送郵件、短信等等。但是就是這么一個簡單的功能,確難倒我了。?
明確的需求:點擊“open”按鈕,打開郵箱選擇框,點擊所選郵箱后跳轉(zhuǎn)至郵箱。
就是這么簡單的需求。很簡單,使用Intent.action就可以實現(xiàn)了。代碼如下:
Intent intent=new Intent(android.content.Intent.ACTION_SEND);
intent.setType("text/plain");
startActivity(Intent.createChooser(intent,"分享一下"));
很簡單的幾行代碼。但是一運行就發(fā)現(xiàn)不一樣了。需求中 “點擊所選郵箱后跳轉(zhuǎn)至郵箱” 。但是這樣做的結(jié)果是點擊跳轉(zhuǎn)的是寫郵件的頁面。不一樣啊!
認真思考后,我認為一下的想法可能能夠?qū)崿F(xiàn):
1、可能存在直接調(diào)用系統(tǒng)郵箱的方法。
2、獲取郵箱的包名,通過郵件的包名打開郵箱。
第一種方法實在沒有找到,默認為沒有。如果哪位朋友知道,還請不吝賜教。
現(xiàn)在說第二種方法
Uri uri = Uri.parse("mailto:"+emailText);
List packageInfos = getPackageManager().queryIntentActivities(newIntent(Intent.ACTION_SENDTO, uri),0);
List packageList =newArrayList<>();
List emailIntents =newArrayList<>();
for(inti =0; i < packageInfos.size(); i++) {
String packageName = packageInfos.get(i).activityInfo.packageName;
if(packageList.contains(packageName)) {
packageList.remove(packageName);
}
packageList.add(packageName);
}
for(inti =0; i < packageList.size(); i++) {
Intent intent = getPackageManager().getLaunchIntentForPackage(packageList.get(i));
emailIntents.add(intent);
}
Intent chooserIntent = Intent.createChooser(emailIntents.remove(0),"Select app!");
if(chooserIntent !=null) {
chooserIntent.putExtra(Intent.EXTRA_INITIAL_INTENTS, emailIntents.toArray(newParcelable[]{}));
startActivity(chooserIntent);
}
再次嘗試,成功啦!
小結(jié)
雖然是一個很小的功能,但是從這個小功能中,我們能夠明白:當(dāng)沒有現(xiàn)成的可以使用時,我們應(yīng)該思考,運用現(xiàn)有的方法去達到我們的目的!下一期我想和大家分享的是:方便高效仿IOS dialog。
>原文作者litterMay