Android學習筆記5:Intent意圖學習

還是,筆記僅爲供自己學習記錄,如果有幸對看官產生幫助,我會很榮幸

Intent 意圖

Intent是什麼?它是連接應用程序的三個核心組件--Activity、Service和BroadcastReceiver的橋樑,完成組件之間的調用,在組件之間傳遞信息。

當不同組件之間要交流時,需要用Intent來對其中涉及到的行動,動作及涉及到的數據進行描述、傳遞。

Intent對象,由組件名稱,以及Action、Data、Category、Extra和Flag幾部分組成。

  1. 要處理該Intent的組件名稱。
  2. Action行動:一個字符串,用於命名要採取的行動
  3. Data數據:執行動作要操作的數據,用指向數據的一個URL來表示。例如指向某聯繫人的URL爲:content://contacts/1
  4. category類別:被執行動作的附加信息
  5. type數據類型:強制指定數據的類型
  6. extras附加信息:其他所以附加信息的集合
  7. flag標誌:Android系統啓動一個Acitvity以及Activity啓動後對其進行數據處理

 Intent的分類:Intent有直接意圖和間接意圖兩種方式。

(1)直接意圖:指定了要調用的組件,一般用在應用程序的內部,或者明確知道組件的名稱。如

Intent i = new Intent(this,ActivitySec.class);
//表明了當前組件(this),到類ActivitySec的直接意圖

(2)間接意圖:沒有指定具體組件,這些Intent包含足夠的信息,系統根據這些信息,在所有可用的組件中,確定滿足此Intent的組件。例如是調用照相機,還是打開瀏覽器等等

Intent intent=new Intent(Intent.ACTION_VIEW,Uri.parse("http://www.baidu.com"));
startActivity(intent);

例如上述例子,則是跳轉到網址百度的,那麼系統將會自動檢測,判斷出打開瀏覽器,從而進入百度頁面

此外,還有其他的模糊意圖

瀏覽網頁:

intent = new Intent(Intent.ACTION_VIEW,Uri.parse("http://developer.android.com"));

打電話:

intent = new Intent(Intent.ACTION_CALL,Uri.parse("tel:(+86)10086"));

撥號:

intent = new Intent(Intent.ACTION_DIAL,Uri.parse("tel:(+86)10086"));

發短信:

intent = new Intent(Intent.ACTION_VIEW);
intent.putExtre("sms_body","The SMS text");
intent.setType("vnd.android-dir/mms-sms");

啓動照相機

intent = new Intent("android.media.action.IMAGE_CAPTURE");

不過,在使用過程中,都要進行註冊,一定的權限,下面是常用的:

上網權限
<uses-permission android:name="android.permission.INTRNET">

使用照相機的權限
<uses-permission android:name="android.permission.CAMERA">

發短信的權限
<uses-permission android:name="android.permission.SEND_SMS">

打電話的權限
<uses-permission android:name="android.permission.CALL_PHONE">

寫短信的權限
<uses-permission android:name="android.permission.WRITE_SMS">

Intent 直接意圖和間接意圖舉例

接下來,來嘗試一下幾種不同的跳轉方式

界面文檔我就不貼了,直接發圖:

MainActivity.java

public class MainActivity extends Activity {

    @Override
protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
    }
    
    public void onClick(View view) {
		// TODO Auto-generated method stub
    	switch(view.getId()){
//button1是跳轉到新的界面
    	case R.id.button1:
    		Intent intent_two = new Intent(MainActivity.this,TwoActivity.class);
    		startActivity(intent_two);
    		break;
//button2是帶信息跳轉到新的界面
    	case R.id.button2:
    		Intent intent_three = new Intent(MainActivity.this,ThirdActivity.class);
    		intent_three.putExtra("text1", "這是第二個Activity");
    		startActivity(intent_three);
    		break;
//button3是帶有返回值的跳轉,當跳回主界面的時候,會toast出所返回的信息
    	case R.id.button3:
    		Intent intent_four = new Intent(MainActivity.this,FourActivity.class);
    		startActivityForResult(intent_four, 1);
    		break;

/*
*通過間接意圖來實現跳轉到另一應用的指定界面(瀏覽器界面)
*/

    	case R.id.button4:
    		Intent intent_five = new Intent(Intent.ACTION_VIEW,Uri.parse("http://www.baidu.com"));
//當識別出http://時,會默認打開瀏覽器
    		startActivity(intent_five);
    		break;
    	}
	}
    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        // Inflate the menu; this adds items to the action bar if it is present.
        getMenuInflater().inflate(R.menu.activity_main, menu);
        return true;
    }

	@Override
	protected void onActivityResult(int requestCode, int resultCode, Intent data) {
		// TODO Auto-generated method stub
		super.onActivityResult(requestCode, resultCode, data);
		if(requestCode==1&&resultCode==2){
			String backData=data.getStringExtra("name");
			Toast.makeText(MainActivity.this,backData,0).show();
		}
	}
}

TwoActivity.java,對應第一種跳轉

public class TwoActivity extends Activity {
	@Override
	protected void onCreate(Bundle savedInstanceState) {
		// TODO Auto-generated method stub
		super.onCreate(savedInstanceState);
		setContentView(R.layout.second_activity);
	}

}

ThirdActivity,對應第二種跳轉,帶信息跳轉到新的頁面

public class ThirdActivity extends Activity {
	@Override
	protected void onCreate(Bundle savedInstanceState) {
		// TODO Auto-generated method stub
		super.onCreate(savedInstanceState);
		setContentView(R.layout.third_activity);
		TextView tv=(TextView)findViewById(R.id.third_textView1);
		String str=this.getIntent().getExtras().getString("text1");
	}

}

ForthActivity.java,對應有返回值的跳轉,在這個界面來存入信息,當跳回主界面時會toast出剛剛輸入的信息。

​​

 

public class FourActivity extends Activity implements OnClickListener{
	
	@Override
	protected void onCreate(Bundle savedInstanceState) {
		// TODO Auto-generated method stub
		super.onCreate(savedInstanceState);
		setContentView(R.layout.forth_activity);
	}
	
	@Override
	public void onClick(View v) {
		// TODO Auto-generated method stub
		Intent intent=new Intent();
		EditText edi_name=(EditText) findViewById(R.id.forth_editText1);
		EditText edi_pwd=(EditText) findViewById(R.id.forth_editText2);
		String s="用戶名是:"+edi_name.getText().toString()+"密碼是:"+edi_pwd.getText().toString();
		intent.putExtra("name", s);
		setResult(2,intent);
		finish();
	}
}

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章