Android教程網
  1. 首頁
  2. Android 技術
  3. Android 手機
  4. Android 系統教程
  5. Android 游戲
 Android教程網 >> Android技術 >> Android開發 >> 關於android開發 >> Intent屬性詳解二 Action、Category,intentcategory

Intent屬性詳解二 Action、Category,intentcategory

編輯:關於android開發

Intent屬性詳解二 Action、Category,intentcategory


先看效果圖:

1、Action:該activity可以執行的動作

該標識用來說明這個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>的行為測試。

2、Category:指定當前動作(Action)被執行的環境

即這個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

三 附《Intent調用常見系統組件方法》

// 調用浏覽器  

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);  

 Demo源碼

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下載
最後,以上例子都來源與安卓無憂,請去應用寶或者豌豆莢下載:例子源碼,源碼例子文檔一網打盡

  1. 上一頁:
  2. 下一頁:
熱門文章
閱讀排行版
Copyright © Android教程網 All Rights Reserved