android 一個apk調用另一個apk


2012-01-17 15:58:31|  分類: android|舉報|字號 訂閱

   其實,這本來是一件很簡單的事情,但是我發現很多人問我這個問題,所以寫篇小文章供參考。


    系統提供了很多可以直接調用的Activity,通過指定的Intent就可以調用,比如打開搜索的:

 

Java代碼  
  1. Intent intent = new Intent(Intent.ACTION_WEB_SEARCH);  
  2. intent.putExtra(SearchManager.QUERY,"searchString")  
  3. startActivity(intent);  
 

     Intent.ACTION_WEB_SEARCH是一個字符串,是“搜索”這個Activity的標識,extra是傳給這個activity的一些數據。發送出這個intent之後,系統根據action字符串Intent.ACTION_WEB_SEARCH知道了是要調用哪個activity,如果有重名,會彈出一個選擇對話框。然後打開此activity,實現想要做的事情。


    那麼,我們自己怎麼來實現呢。
    首先,寫一個activity,在AndroidManifest.xml裏面的intent-filter中,給這個activity命名,

 

Xml代碼  
  1. <intent-filter>  
  2.         <action android:name="chroya.foo"/>  
  3.         <category android:name="android.intent.category.DEFAULT"/>  
  4. </intent-filter>  
 

    然後安裝。安裝完畢之後,你會發現,系統中找不到這個程序。別急,它確實安裝在手機裏面了,但是因爲他不是main的,所以系統不會把他當做Application的入口程序。


    而要想打開這個activity,只有知道它名字的人纔可以。跟系統的intent一樣使用。它的名字定義爲"chroya.foo",所以,這裏用這個字符串就可以調用它了:

 

Java代碼  
  1. Intent intent = new Intent("chroya.foo");  
  2. startActivity(intent);  
 

    我用剛纔舉的那個系統的intent說明,它的activity裏面使用getIntent().getBundleExtra(SearchManager.QUERY)來接收傳遞進來的搜索字符串參數。而這個SearchManager.QUERY是關鍵字。如果要自己實現這種功能,只需要定義好關鍵字,然後從BundleExtra中取就行了

轉載請註明來源:唐磊的個人博客《android啓動系統應用activity-另一個APK》

寫短信羣發小工具,當發送成功後,想跳動到系統自帶的已發送或者發件箱,網上搜了下。開始關鍵字沒輸好,搜不到,結果用一個apk啓動另一個apk就搜到了。

方法如下,

1
2
3
4
5
Intent mIntent = new Intent( ); 
  ComponentName comp = new ComponentName("包名""類名");     
  mIntent.setComponent(comp); 
  mIntent.setAction("android.intent.action.VIEW"); 
  startActivity(mIntent);

怎麼找到要啓動的activity呢,手機連接logcat,啓動下那個想要通過代碼啓動的那個應用程序,就能看到了。例如本例,啓動信息的那個apk時,logcat打印出

1
2
07-13 09:22:15.104: INFO/ActivityManager(59): Starting activity: Intent {act=android.intent.action.MAIN cat=[android.intent.category.LAUNCHER] flg=0x10200000 cmp=com.android.mms/.ui.ConversationList }
07-13 09:22:17.675: INFO/ActivityManager(59): Displayed activity com.android.mms/.ui.ConversationList: 2478 ms (total 2478 ms)

然後帶入上面的就是

1
2
3
4
ComponentName comp = new ComponentName("com.android.mms","com.android.mms.ui.ConversationList");     
mIntent.setComponent(comp); 
mIntent.setAction("android.intent.action.VIEW"); 
startActivity(mIntent)

logcat輸出的信息com.android.mms/.ui.ConversationList中,/前面的是包名,我試着把/後面的類名帶入也不行,提示activityNotfound。最後/後面的類名也把包名加完整即可,及上面所示com.android.mms.ui.ConversationList。

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