Android中Intent的顯示和隱式使用


Android應用程序中組件之間的通信都少不了Intent的使用,Intent負責對應用中一次操作的動作、動作涉及數據、附加數據進行描述,Android則根據此Intent的描述,負責找到對應的組件,將 Intent傳遞給調用的組件,並完成組件的調用。intent就是意圖的意思。Intent分兩種:顯式(Explicit intent)和隱式(Implicit intent)。

顯示調用Intent

簡單的Demo從一個Activity轉到另外一個Aactivity:

Mainactivity的布局文件

    <EditText
        android:id="@+id/edt_content"
        android:layout_width="match_parent"
        android:layout_height="wrap_content" />

    <Button
        android:id="@+id/btn_login"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_below="@id/edt_content"
        android:onClick="login"
        android:text="查詢" />

 

 Mainactivity中調用點擊事件:

EditText  contentEditText=(EditText) findViewById(R.id.edt_content);
    	Intent intent=new Intent(this,PersonActivity.class);
    	intent.putExtra(EXTRA,contentEditText.getText().toString());
    	startActivity(intent);

  這個時候的Intent就是顯示調用,直接指定了接收參數的Activity,可以唯一確定一個Activity,意圖特別明確,這個時候需要在PersonActivity接收參數:

public class PersonActivity extends Activity {

	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_person);
		TextView  textView=(TextView) findViewById(R.id.txt_content);
		Intent intent=getIntent();
		String  str=intent.getStringExtra(MainActivity.EXTRA);
		textView.setText(str);
		textView.setTextSize(20);
		textView.setTextColor(Color.RED);
	
	}

另外這個時候傳遞的參數使用的方法是putExtra,如果傳遞的參數比較多可以使用Bundle類似於map。

隱式調用

隱式,即不是像顯式的那樣直接指定需要調用的Activity,隱式不明確指定啟動哪個Activity,而是設置Action、Data、Category,讓系統來篩選出合適的Activity。篩選是根據所有的<intent-filter>來篩選。

這個時候需要在AndroidManifest.xml中設置一下intent-filter中去設置一下,如下,Category直接使用默認的就行:

    <intent-filter>
                <action android:name="com.example.googleone.Peson" />
                <category android:name="android.intent.category.DEFAULT" />
            </intent-filter>

 Mainactivity中的調用使用,這個時候的調用:

  Intent intent=new  Intent("com.example.googleone.Peson");
   startActivity(intent);

 這個自己定義的Action字符串可以調用自身程序的Activity,還可以其他應用程序的Action,比如說常用的撥號面板:

	Intent intent = new Intent(Intent.ACTION_DIAL);
    		startActivity(intent);

如果這個時候在AndroidManifest.xml文件中給PersonActivity, 加一個Action,如下:

  <activity
            android:name=".PersonActivity"
            android:label="@string/title_activity_person" >
            <intent-filter>
                <action android:name="android.intent.action.DIAL"/>  
                <action android:name="com.example.googleone.Peson" />
                <category android:name="android.intent.category.DEFAULT" />
            </intent-filter>
        </activity>

Mainactivity中的調用:

	Intent intent=new Intent(Intent.ACTION_DIAL);
    	if(intent.resolveActivity(getPackageManager()) == null)
    	{
    		view.setEnabled(false);
    	}
    	try {
			startActivity(intent);
		} catch (ActivityNotFoundException e) {
			// TODO Auto-generated catch block
		Toast.makeText(this,"找不到對應的Activity",Toast.LENGTH_SHORT).show();
		}

結果如圖所示:

  

 Intent.ACTION_DIAL是系統常量字符串,等價於android.intent.action.DIAL,調用的時候通過這個action的名稱,去尋找具有這個action的activity~


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM