說點零零碎碎便於之後參考: java
if (somethingWeird && itDontLookGood) { Intent intent = new Intent(Intent.ACTION_DIAL, Uri.parse(「tel:555-2368」)); startActivity(intent); }
if (somethingWeird && itDontLookGood) { // Create the impliciy Intent to use to start a new Activity. Intent intent = new Intent(Intent.ACTION_DIAL, Uri.parse(「tel:555-2368」)); // 檢查是否存在能執行該action的activity PackageManager pm = getPackageManager(); ComponentName cn = intent.resolveActivity(pm); //若是沒有,那麼就去Google Play去找找看 if (cn == null) { Uri marketUri = Uri.parse(「market://search?q=pname:com.myapp.packagename」); //指定app的包名 Intent marketIntent = new Intent(Intent.ACTION_VIEW).setData(marketUri); //若是Google Play上有,那麼就去下載一個APP來。 if (marketIntent.resolveActivity(pm) != null) startActivity(marketIntent); else //注意:不是每臺設備都裝了Google Play Store Log.d(TAG, 「Market client not available.」); } else startActivity(intent); }
private static final int PICK_CONTACT_SUBACTIVITY = 2; private void startSubActivityImplicitly() { Uri uri = Uri.parse(「content://contacts/people」); Intent intent = new Intent(Intent.ACTION_PICK, uri); startActivityForResult(intent, PICK_CONTACT_SUBACTIVITY); }
這裏演示的是去取一個聯繫人的信息。 android
當子activity finish掉以前,只要setResult(int resultCode)或者setResult(int resultCode,Intent data)把數據放進去,這個方法的intent主要仍是來放數據的(一般就是個URI,再多一點就是額外的extra鍵值對,bundle之類的,不解釋了)。 web
一般來講resultCode無外乎2種,要麼是Activity.RESULT_OK或者就是Activity.RESULT_CANCELED, 固然你若是要求比較嚴格的描述,那你能夠本身定義個整形常量就能夠了,既然有結果碼,對應必然從父activity傳來的請求碼。。不解釋了 正則表達式
setResult(RESULT_CANCELED); //位置在finish以前。
finish(); 瀏覽器
那麼父activity是如何接受到,子activity所返回的數據? app
只須要重寫onAcitivtyResult方法。(參數不解釋了,太直觀了) ide
ACTION_ALL_APPS:打開一個acitivty,列出全部app。 這個一般也就laucher對它有興趣了。 函數
ACTION_ANSWER: 打開一個用來接受電話的activity. 工具
ACTION_BUG_REPORT: 打開一個用來發布BUG的activity. 測試
ACTION_CALL: 打電話的,不過這個根據你提供的號碼,初始化打電話界面,可是不拔出!
ACTION_DIAL: 直接就撥出了。電話的URI寫法不一:好比tel:555-1234或者tel:(212)555 212也是容許的。其它的不解釋了。
ACTION_CALL_BUTTON: 這個就是那個剛剛初始化的打電話界面。
ACTION_DELETE: 顧名思義,根據提供的URI刪除數據。
ACTION_EDIT: 提供一個能根據指定數據URI顯示一個可編輯的界面。
ACTION_INSERT: 用來插入數據。
ACTION_PICK: 根據指定的數據URI,去獲取一個聯繫人信息從Content Provider。 當被關閉,應該返回一個當前被選中的聯繫人的URI,好比URI:content://contacts/people將會調用原生的聯繫人列表。
ACTION_SEARCH: 啓動一個查找指定東西的Activity. 具體。。。先不說了,用到百度吧。
ACTION_SEARCH_LONG_PRESS: 這個典型的用在快捷的發音查找。
ACITON_SENDTO : 根據指定的聯繫人發送數據。
ACTION_SEND: 用來給遠程的接受者發送數據。
ACTION_VIEW: 這個最最經常使用的action。 根據提供的數據URI顯示各類合理的視圖。主要看URI的模式是什麼。好比http:的地址將會打開在瀏覽器,tel開頭就是打電話的界面了,
geo:開頭的顯示指定位置在GoogleMap上,若是是聯繫人的content,那麼顯示聯繫人管理。
ACTION_WEB_SERACH 打開一個瀏覽器用於查詢,基於使用的SearchManager.QUERY鍵。
還有些關於廣播的ACTION,之後再說。
Linkify 是一個工具類,用來幫助建立TextView或者TextView的子類的超連接,經過正則表達式的匹配。
裏面含的文本若是匹配指定的正則表達式,那麼這文本將會被轉化爲可點擊的超連接(點擊超連接默認隱式調用startActivity(new Intent(Intent.ACITION_VIEW,uri)))。超連接的文本就是對應的uri。
你能夠指定任何自定義的正則表達式被視爲可點擊的連接;爲了方便,Linkify類預設了常見的內容類型。
原生的Linkify連接類型
Linkify預設的類型有web URLs,email地址,電話號碼。 去應用一個預設類型,可使用靜態的Linkify.addLinks方法,參數中傳遞一個須要被應用的View和描述類型的位掩碼常量.
如:WEB_URLS,EMAIL_ADDRESS,PHONE_NUMBERS和ALL。
例子:
TextView textView = (TextView)findViewById(R.id.myTextView);
Linkify.addLinks(textView,Linkify.WEB_URLS|Linkify.EMAIL_ADDRESSES);
你也能夠在XML中添加:
<TextView
android:layout_width=」match_parent」
android:layout_height=」match_parent」
android:text=」@string/linkify_me」
android:autoLink=」phone|email」 //可選值有none,web,email,phone,all
/>
Tip:從上面咱們已經明白,Linkify所作的本質工做:找到匹配所指定的(預設的也好,自定義的也好)正則表達式,而後這段字符串自動變爲可點擊的超連接。
有時候,你想連接你本身的數據,那麼你就須要去自定義linkify的表達式了。
例子:
這代碼的大體思路是:構建基礎Uri,先測試是否找獲得Action爲ACTION_VIEW和指定的Uri的activity,若是找不到,那麼後面的工做就不須要作了,若是找到了,那麼爲myTextView添加這種超連接規則。
// 定義基礎Uri
String baseUri = 「content://com.paad.earthquake/earthquakes/」;
//接着就開始測試了。
PackageManager pm = getPackageManager();
Intent testIntent = new Intent(Intent.ACTION_VIEW, Uri.parse(baseUri));
boolean activityExists = testIntent.resolveActivity(pm) != null;
//若是存在的話,那麼添加匹配模式並將textView拉進去折騰。
if (activityExists) {
int flags = Pattern.CASE_INSENSITIVE;
Pattern p = Pattern.compile(「\\bquake[\\s]?[0-9]+\\b」, flags); //quake開頭加上一串數字和可選的空格
Linkify.addLinks(myTextView, p, baseUri); 這個是Linkify.addLinks的另一個重載函數
}
可是隻是簡單這麼作了可能會出問題,可能你須要處理下空格或者處理下字符之類須要處理的,否則生成的uri多是非法的,這是Linkify.addLinks的另外個重載函數,多了2個參數
matchFilter, transformFilter,前者用來繼續過濾,後者用來處理當前字符串以符合自個兒要求的字符串,最後再附加到baseUri上成爲一個完整的uri.
DEMO:
class MyMatchFilter implements MatchFilter { public boolean acceptMatch(CharSequence s, int start, int end) { return (start == 0 || s.charAt(start-1) != ‘!’); } } class MyTransformFilter implements TransformFilter { public String transformUrl(Matcher match, String url) { return url.toLowerCase().replace(「 「, 「」); } }