Intent尋找目標組件的兩種方式:
顯式Intent:通過指定Intent組件名稱來實現的,它一般用在知道目標組件名稱的前提下,一般是在相同的應用程序內部實現的。
隱式Intent:通過Intent Filter來實現的,它一般用在沒有明確指出目標組件名稱的前提下,一般是用於在不同應用程序之間。
一、顯示Intent:
創建一個Activity的完整過程:
1、手動創建一個類,讓其繼承自Activity:
public class MyAty extends Activity
2、讓其綁定一個視圖:
public class MyAty extends Activity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.myaty);
}
}
3、AndroidMainfest.xml文件進行Intent的配置:
<activity android:name=".MyAty"/> <!--<activity android:name="com.w.learnintent.MyAty"/>-->
4、啟動的功能代碼:
activity_main.xml文件中:<Button android:text="Start MyAty" android:id="@+id/btnStartMyAty" />
MainActivity.java文件中:
findViewById(R.id.btnStartMyAty).setOnClickListener(new View.OnClickListener(){
@Override
public void onClick(View v) {
startActivity(new Intent(MainActivity.this,MyAty.class)); //顯示Intent
}
二、隱式Intent:
1、AndroidMainfest.xml文件進行Intent的配置:
<activity android:name=".MyAty">
<intent-filter>
<category android:name="android.intent.category.DEFAULT"/>
<action android:name="com.w.learnIntent.intent.action.MyAty"/>
</intent-filter>
</activity>
2、在被啟動的Activity——MyAty.java中創建一個字符串ACTION:
public static final String ACTION = "com.w.learnIntent.intent.action.MyAty";
3、啟動的功能代碼:
startActivity(new Intent(MyAty.ACTION)); //隱式Intent
三、不同應用程序之間(隱式Intent):
1、在原有項目基礎上新建module,創建另一個程序。
2、原有項目AndroidMainfest.xml文件進行Intent的配置:
<activity android:name=".MyAty" android:exported="false"> <!-- android:exported:該服務是否能夠被其他應用程序組件調用或跟它交互-->
<intent-filter>
<category android:name="android.intent.category.DEFAULT"/>
<action android:name="com.w.learnIntent.intent.action.MyAty"/>
</intent-filter>
</activity>
3、新項目的MainActivity.java文件中:
findViewById(R.id.btnStartMyAty).setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
try {
startActivity(new Intent("com.w.learnIntent.intent.action.MyAty"));
}catch(Exception e){
Toast.makeText(MainActivity.this,"無法啟動指定的Activity",Toast.LENGTH_SHORT).show(); //Toast.LENGTH_SHORT短時間呈現
}
}