編輯:關於android開發
先看效果圖:
該標識用來說明這個activity可以執行哪些動作,所以當隱式intent傳遞過來action時,如果跟這裡<intent-filter>所列出的任意一個匹配的話,就說明這個activity是可以完成這個intent的意圖的,可以將它激活!
常用的Action如下所示:
ACTION_CALL activity 啟動一個電話.
ACTION_EDIT activity 顯示用戶編輯的數據.
ACTION_MAIN activity 作為Task中第一個Activity啟動
ACTION_SYNC activity 同步手機與數據服務器上的數據.
ACTION_BATTERY_LOW broadcast receiver 電池電量過低警告.
ACTION_HEADSET_PLUG broadcast receiver 插拔耳機警告
ACTION_SCREEN_ON broadcast receiver 屏幕變亮警告.
ACTION_TIMEZONE_CHANGED broadcast receiver 改變時區警告.
兩條原則:
一條<intent-filter>元素至少應該包含一個<action>,否則任何Intent請求都不能和該<intent-filter>匹配。
如果Intent請求的Action和<intent-filter>中個任意一條<action>匹配,那麼該Intent就可以激活該activity(前提是除了action的其它項也要通過)。
兩條注意:
如果Intent請求或<intent-filter>中沒有說明具體的Action類型,那麼會出現下面兩種情況。如果<intent-filter>中沒有包含任何Action類型,那麼無論什麼Intent請求都無法和這條<intent-filter>匹配。 反之,如果Intent請求中沒有設定Action類型,那麼只要<intent-filter>中包含有Action類型,這個Intent請求就將順利地通過<intent-filter>的行為測試。
即這個activity在哪個環境中才能被激活。不屬於這個環境的,不能被激活。
常用的Category屬性如下所示:
CATEGORY_DEFAULT:Android系統中默認的執行方式,按照普通Activity的執行方式執行。表示所有intent都可以激活它
CATEGORY_HOME:設置該組件為Home Activity。
CATEGORY_PREFERENCE:設置該組件為Preference。
CATEGORY_LAUNCHER:設置該組件為在當前應用程序啟動器中優先級最高的Activity,通常為入口ACTION_MAIN配合使用。
CATEGORY_BROWSABLE:設置該組件可以使用浏覽器啟動。表示該activity只能用來浏覽網頁。
CATEGORY_GADGET:設置該組件可以內嵌到另外的Activity中。
注意:如果該activity想要通過隱式intent方式激活,那麼不能沒有任何category設置,至少包含一個android.intent.category.DEFAULT
// 調用浏覽器 Uri webViewUri = Uri.parse("http://blog.csdn.net/zuolongsnail"); Intent intent = new Intent(Intent.ACTION_VIEW, webViewUri); // 調用地圖 Uri mapUri = Uri.parse("geo:100,100"); Intent intent = new Intent(Intent.ACTION_VIEW, mapUri); // 播放mp3 Uri playUri = Uri.parse("file:///sdcard/test.mp3"); Intent intent = new Intent(Intent.ACTION_VIEW, playUri); intent.setDataAndType(playUri, "audio/mp3"); // 調用撥打電話 Uri dialUri = Uri.parse("tel:10086"); Intent intent = new Intent(Intent.ACTION_DIAL, dialUri); // 直接撥打電話,需要加上權限<uses-permission id="android.permission.CALL_PHONE" /> Uri callUri = Uri.parse("tel:10086"); Intent intent = new Intent(Intent.ACTION_CALL, callUri); // 調用發郵件(這裡要事先配置好的系統Email,否則是調不出發郵件界面的) Uri emailUri = Uri.parse("mailto:[email protected]"); Intent intent = new Intent(Intent.ACTION_SENDTO, emailUri); // 直接發郵件 Intent intent = new Intent(Intent.ACTION_SEND); String[] tos = { "[email protected]" }; String[] ccs = { "[email protected]" }; intent.putExtra(Intent.EXTRA_EMAIL, tos); intent.putExtra(Intent.EXTRA_CC, ccs); intent.putExtra(Intent.EXTRA_TEXT, "the email text"); intent.putExtra(Intent.EXTRA_SUBJECT, "subject"); intent.setType("text/plain"); Intent.createChooser(intent, "Choose Email Client"); // 發短信 Intent intent = new Intent(Intent.ACTION_VIEW); intent.putExtra("sms_body", "the sms text"); intent.setType("vnd.android-dir/mms-sms"); // 直接發短信 Uri smsToUri = Uri.parse("smsto:10086"); Intent intent = new Intent(Intent.ACTION_SENDTO, smsToUri); intent.putExtra("sms_body", "the sms text"); // 發彩信 Uri mmsUri = Uri.parse("content://media/external/images/media/23"); Intent intent = new Intent(Intent.ACTION_SEND); intent.putExtra("sms_body", "the sms text"); intent.putExtra(Intent.EXTRA_STREAM, mmsUri); intent.setType("image/png"); // 卸載應用 Uri uninstallUri = Uri.fromParts("package", "com.app.test", null); Intent intent = new Intent(Intent.ACTION_DELETE, uninstallUri); // 安裝應用 Intent intent = new Intent(Intent.ACTION_VIEW); intent.setDataAndType(Uri.fromFile(new File("/sdcard/test.apk"), "application/vnd.android.package-archive"); // 在Android Market中查找應用 Uri uri = Uri.parse("market://search?q=憤怒的小鳥"); Intent intent = new Intent(Intent.ACTION_VIEW, uri);
package mm.shandong.com.testactioncate; import android.content.Intent; import android.support.v7.app.AppCompatActivity; import android.os.Bundle; import android.view.Menu; import android.view.View; public class TestActionCateActivity extends AppCompatActivity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_test_action_cate); } //啟動activityTestComponentOtherActivity,設置intent的action為 //TestComponentOtherActivity1 public void startActivityToAction1(View view) { Intent intent = new Intent(); intent.setAction("TestComponentOtherActivity1"); startActivity(intent); } //啟動activityTestComponentOtherActivity,設置intent的action為 //TestComponentOtherActivity2 public void startActivityToAction2(View view) { Intent intent = new Intent(); intent.setAction("TestComponentOtherActivity2"); startActivity(intent); } //啟動activityTestComponentOtherActivity,設置intent的action為 //TestComponentOtherActivity3 public void startActivityToAction3(View view) { Intent intent = new Intent(); intent.setAction("TestComponentOtherActivity3"); startActivity(intent); } //啟動action為sameAction的activity,有兩個activity設置了相同 //的action public void startActivitySameAction1(View view) { Intent intent = new Intent(); intent.setAction("sameAction"); startActivity(intent); } //啟動action為Intent.ACTION_VIEW的activity, // 系統浏覽器的activity也設置了這個action public void startActivitySameAction2(View view) { Intent intent = new Intent(); intent.setAction(Intent.ACTION_VIEW); startActivity(intent); } //啟動一個設置了三個category的activity,這個category必須全都設置, //才能啟動 public void startActivityCategory(View view) { Intent intent = new Intent(); intent.setAction("TestActionCate3Activity"); intent.addCategory("category1"); intent.addCategory("category2"); intent.addCategory("category3"); startActivity(intent); } }
本人微博:honey_11
Demo下載
最後,以上例子都來源與安卓無憂,請去應用寶或者豌豆莢下載:例子源碼,源碼例子文檔一網打盡
android 常用的listview管理示例 listview作為一個常用控件,對listview的操作都應該滾瓜爛熟了。對listview 的數據管理也很熟悉。包括l
由於此前在51寫過屏幕鎖相關的文章,在最近開發過程中也用到了屏幕鎖,今天就抽個時間將屏幕鎖的控制及實現代碼復習及更一步學習,希望能幫助朋友們對屏幕鎖
android studio上的基本動畫實現(第一篇),androidstudiohello,各位小伙伴們,在很多小伙伴們剛剛開始學習android的時候,常常會有一些p
為RecyclerView打造通用Adapter 讓RecyclerView更加好用,recyclerviewadapter原文出處: 張鴻洋 (Granker