天天看点

通过包名打开另外一个应用程序

应用场景:对于我们自己开发的两个应用程序,一个应用程序的包名为 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得到的想要启动的应用的包名。这样,我们就可以不知道别人应用源码的情况下,也可以调用别人的应用程序。

继续阅读