應用場景:對于我們自己開發的兩個應用程式,一個應用程式的包名為 aa.bb.cc,軟體名叫a,它的入口activity為 aaactivity(入口activity就是在androidmanifest.xml中标簽——<action android:name="android.intent.action.main" />所在的activity,說白了,就是打開應用程式,第一個顯示的activity),另一個應用程式的包名為
xx.yy.zz,軟體名叫x,它的入口activity為 xxactivity。
網上的通用做法如下(這裡我假設a中有一個button,這個button的onclick事件中的代碼如下):
componentname componentname=new componentname("xx.yy.zz","xx.yy.zz.xxactivity");
intent intent=new intent();
intent.setcomponent(componentname);
intent.setaction(intent.action_view);
startactivity(intent);
這種方法對于調用我們自己寫的應用程式沒有問題,但是如果你想調用别人的應用程式(例如:你寫了一個遊戲管理的軟體,需要管理很多遊戲,但是遊戲不是你寫的,你是得不到入口activity的,你怎麼辦?),解決辦法如下:
通過packagemanager可以得到packageinfo,通過packageinfo就可以得到你手機上安裝的應用的包名(這個很簡單,網上有的是,不贅述)。關鍵是下一步,代碼如下(也是a應用中button的onclick中的代碼):
packagemanager packagemanager = start_removesoftactivity.this.getpackagemanager();
intent intent=new intent();
try {
intent =packagemanager.getlaunchintentforpackage("要調用應用的包名");
} catch (namenotfoundexception e) {
log.i(tag, e.tostring());
}
startactivity(intent);
其中,"要調用應用的包名"為通過packageinfo得到的想要啟動的應用的包名。這樣,我們就可以不知道别人應用源碼的情況下,也可以調用别人的應用程式。