Android提供了在一个App中启动另一个App中的Activity的能力,这使我们的程序很容易就可以调用其他程序的功能,从而就丰富了我们App的功能。比如在微信中发送一个位置信息,对方可以点击这个位置信息启动腾讯地图并导航。这个场景在现实中作用很大,尤其是朋友在陌生的环境找不到对方时,这个功能简直就是救星。

因为每个App都会运行在自己的虚拟机中,每个虚拟机跑在一个进程中。但仔细一想,能够称为一个进程,前提是这个App必须要运行起来才行。而Android提供的能力,是不需要另一个App启动就可以将其特定的Activity启动起来的。

我们有至少两种办法达到启动另一个App中的Activity,

第一种用action启动

第二种用intent设置className或component的办法启动。举例如下。新建两个项目ProjectA和ProjectB

本文采用第一种方式:

ProjectA:AndroidManifest.xml配置


ProjectB :MainActivity代码

   

Intent intent = new Intent();
    ComponentName cn = new ComponentName("com.cosw.qhseitsm.sdk.test","com.cosw.tsm.sdk.test.SplashActivity");
    intent.setComponent(cn);
    intent.setAction("android.intent.action.MAIN");
    startActivityForResult(intent, RESULT_OK);

在A中调用以上代码即可实现在A中打开B应用。
---------------------  
作者:Mrs陶  
来源:CSDN  
原文:https://blog.csdn.net/u012454773/article/details/72842916  
版权声明:本文为博主原创文章,转载请附上博文链接!

2、但是更多的时候,我们一般都不知道应用程序的启动Activity的类名,而只知道包名,我们可以这么做

PackageManager pm = MenuActivity.this.getPackageManager();					 
Intent i = pm.getLaunchIntentForPackage("roman10.tutorial.android_ffmpeg_tutorial02");
MenuActivity.this.startActivity(i);
roman10.tutorial.android_ffmpeg_tutorial02是要调用的apk的包名,如果不知道,可以看设备内部路径: data/data/ 或者 data/app 都是应用程序包名命名的。
 

还可以通过ResolveInfo类来取得启动Acitivty的类名。

private void openApp(String packageName) {
PackageInfo pi = getPackageManager().getPackageInfo(packageName, 0);
 
Intent resolveIntent = new Intent(Intent.ACTION_MAIN, null);
resolveIntent.addCategory(Intent.CATEGORY_LAUNCHER);
resolveIntent.setPackage(pi.packageName);
 
List<ResolveInfo> apps = pm.queryIntentActivities(resolveIntent, 0);
 
ResolveInfo ri = apps.iterator().next();
if (ri != null ) {
String packageName = ri.activityInfo.packageName;
String className = ri.activityInfo.name;
 
Intent intent = new Intent(Intent.ACTION_MAIN);
intent.addCategory(Intent.CATEGORY_LAUNCHER);
 
ComponentName cn = new ComponentName(packageName, className);
 
intent.setComponent(cn);
startActivity(intent);
}
}
 

 

转载出处:http://bbs.csdn.net/topics/360165638?page=1#post-394264586

转自:https://blog.csdn.net/u012454773/article/details/72842916?locationNum=4&fps=1

 

Logo

华为开发者空间,是为全球开发者打造的专属开发空间,汇聚了华为优质开发资源及工具,致力于让每一位开发者拥有一台云主机,基于华为根生态开发、创新。

更多推荐