方式二:使用ComponentName
在前一篇相關主題的博文中我們瞭解瞭如何使用Action來啓動當前應用之外的Activity處理我們的業務邏輯,在本篇筆記中我在簡單介紹一下使用ComponentName來與當前應用之外的應用進行交互。
我們首先來了解ComponentName這個類;ComponentName與Intent同位於android.content包下,我們從Android官方文檔中可以看到,這個類主要用來定義可見一個應用程序組件,例如:Activity,Service,BroadcastReceiver或者ContentProvider。
那麼,如何用ComponentName來定義一個組件呢?
- 這是ComponentName的構造函數:
ComponentName(String pkg,String cls)
我們知道在Android應用程序中如果要詳細描述一個組件我們需要知道該組件所在的應用包名,也就是在AndroidManifest.xml文件中manifest根結點下的package=“XXX.XXXXX.XXXXX”,還有組件在應用程序中的完整路徑名,拿Activity來說,也就是activity節點中name屬性的值。因此到這裏我們也就明白了可以使用ComponentName來封裝一個組件的應用包名和組件的名字。
我們已經知道,在Android中組件之間的交流往往使用意圖(Intent)來完成的,那麼在Intent中有一個方法可以封裝一個ComponentName,最後我們在使用意圖去完成我們需要實現的功能。
下面我們用具體的代碼來描述如何使用ComponentName來幫助我們與其他應用程序交互:
首先我們要新建兩個Android應用程序,appsend和appreceiver。
- appreceiver的AndroidMainfest.xml
<activity
android:name="com.example.appreceiver.MainActivity"
android:label="@string/app_name" >
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
- appsend中的啓動Activity的片段:
public void button(View view) {
ComponentName cn=new ComponentName("com.example.appreceiver", "com.example.appreceiver.MainActivity");
Intent intent = new Intent();
intent.setComponent(cn);
startActivityForResult(intent, 2);
}