Android教程網
  1. 首頁
  2. Android 技術
  3. Android 手機
  4. Android 系統教程
  5. Android 游戲
 Android教程網 >> Android技術 >> 關於Android編程 >> Android自學筆記-14-意圖(Intent)

Android自學筆記-14-意圖(Intent)

編輯:關於Android編程

Intent 是一個將要執行的動作的抽象的描述,一般來說是作為參數來使用,由Intent來協助完成android各個組件之間的通訊。Android中的Intent可以理解為不同組件通信的媒介或者信使。所以Intent的主要作用就是調用起來一個Activity或者Service等。

意圖分為顯示意圖和隱式意圖。一般對於顯示意圖使用是比較方便的,如果我們調用的使我們自己的Activity,則可以直接啟動就可以了,如果調用的是其他的Activity,這時候我們就需要獲取到我們要啟動的Activity的包名和類名,然後調用。

對於自己寫的Activity可以按照如下方法調用:

Intent intent = new Intent(this, SecondActivity.class);
startActivity(intent);
如果需要調用別人的Activity,我們需要確定包名類名。但是有時候我們不清楚Activity的包名類名,這時候我們需要在設備上或者模擬器上點擊一下我們想要調用的Activity,這裡以浏覽器為例,這時候在logcat中會打印出如下輸出:
02-24 23:11:19.652: I/ActivityManager(61): Starting: Intent { act=android.intent.action.MAIN flg=0x10000000 cmp=com.android.browser/.BrowserActivity } from pid 137

這時候我們需要關注的是cmp=com.android.browser/.BrowserActivity,通過這個我們能夠確定包名為com.android.browser,類名為com.android.browser.BrowserActivity,這時候就可以通過如下代碼調用起Activity:

Intent intent = new Intent();
intent.setClassName("com.android.browser", "com.android.browser.BrowserActivity");
startActivity(intent);
上面介紹的都是顯示意圖,但是顯示意圖也有其缺點,如果我們調用別人的Activity,如果別人的包名類名改了,這時候我們調用就會失敗,為了應對這種情況,Android中提供的隱式意圖,對於隱式意圖我們在調用的時候需要給我們的Intent配置很多參數,然後Android系統會根據這些參數去調用對應的Activity(對於隱式意圖的詳細解釋,還請百度)。如果某個Activity想通過隱式意圖的方式被調用,必須在其AndroidManifest.xml中配置對應的參數,我這裡有一個配置例子如下:
	
            
                

                
                

                
                

                
                
            
        
這裡配置了一個Activity,並且使其能夠通過隱式意圖調用,下面是調用的代碼:
	Intent intent = new Intent();
    	intent.setAction("com.mxy.intenttest");
    	/**添加類別:startActivity(intent)啟動Activity時會自動添加  
    	 * android.intent.category.DEFAULT類別,所以需要在Manifest中  
    	 * 配置該類別.但在程序中不需要明確添加該類別
    	 * 只有當Intent請求中所有的Category與組件中某一個IntentFilter的完全匹配時,
    	 * 才會讓該 Intent請求通過測試,IntentFilter中多余的聲明並不會導致匹配失敗。
    	 * 一個沒有指定任何類別測試的 IntentFilter僅僅只會匹配沒有設置類別的Intent請求。*/  
//    	intent.addCategory("android.intent.category.DEFAULT");
    	
    	/**設置數據:API中說這個方法會將setType的方法設置的類型清除掉*/  
    	intent.setData(Uri.parse("http://www.andyidea.com:8080/person"));  
    	  
    	/**設置類型:API中說這個方法會將setData上面的方法設置的數據清除掉*/  
    	intent.setType("vnd.androd.cursor.item/test");  
    	  
    	/**同時設置數據和類型:如果Intent過濾器中同時包含數據和數據類型的設置  
    	 * 就只能使用該方式來設置數據和類型*/  
    	intent.setDataAndType(Uri.parse("http://www.andyidea.com:8080/person"), "vnd.androd.cursor.item/test");  
    	startActivity(intent);
上面的代碼是調用自己寫的Activity,其實Android系統也提供了很多的隱式意圖供我們調用,下面就是一個例子:
	Intent intent = new Intent();
    	intent.setAction(Intent.ACTION_VIEW);
    	intent.setData(Uri.parse("http://www.baidu.com"));
    	startActivity(intent);

介紹完了意圖,同時在兩個Activity的切換的過程中經常會涉及到傳值,對於傳值同樣也需要使用Intent。如果我們想把一個值傳遞到待啟動的Activity中,需要按照如下格式寫:
	Intent intent = new Intent(this, SecondActivity.class);
    	intent.putExtra("name", "mengxiangyue");
    	startActivity(intent);
然後在啟動的Activity中使用如下代碼接收傳遞過來的值:
	Intent intent = this.getIntent();
		
	String name = "";
	if(intent.getExtras() != null){
		name = intent.getExtras().getString("name");
		Toast.makeText(this, name, Toast.LENGTH_LONG).show();
	}

傳值做到了,有時候我們還希望被啟動的Activity關閉的時候,傳遞某些值給調用它的Activity。這時候我們需要在調用的時候使用如下代碼:
	Intent intent = new Intent(this, ThirdActivity.class);
    	intent.putExtra("name", "mengxiangyue");
    	startActivityForResult(intent, 1);// 1代表請求碼
在被啟動的Activity執行如下代碼:
	Intent intent = new Intent(this, SecondActivity.class);
	intent.putExtra("back", "這是返回的值");
	setResult(2,intent);
	finish();
這時候數據傳遞回來了,需要在Activity中接收,這時候需要實現如下方法:
	@Override
	protected void onActivityResult(int requestCode, int resultCode, Intent data) {
		System.out.println("requestCode:" + requestCode + " resultCode:" + resultCode + "  data:" + data.getStringExtra("back"));
		Toast.makeText(this, data.getStringExtra("back"), Toast.LENGTH_LONG).show();
		super.onActivityResult(requestCode, resultCode, data);
	}
該方法接收requestCode,resultCode兩個參數,這兩個參數可以唯一的確定某次請求對應的結果,防止返回的結果發生混亂。

例子工程的下載地址:http://download.csdn.net/detail/mengxiangyue/7242667





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