启动另一个App/apk中的Activity(A应用打开B应用)
Android提供了在一个App中启动另一个App中的Activity的能力,这使我们的程序很容易就可以调用其他程序的功能,从而就丰富了我们App的功能。比如在微信中发送一个位置信息,对方可以点击这个位置信息启动腾讯地图并导航。这个场景在现实中作用很大,尤其是朋友在陌生的环境找不到对方时,这个功能简直就是救星。因为每个App都会运行在自己的虚拟机中,每个虚拟机跑在一个进程中。但仔细一想,能够称..
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的类名,而只知道包名,我们可以这么做
roman10.tutorial.android_ffmpeg_tutorial02是要调用的apk的包名,如果不知道,可以看设备内部路径: data/data/ 或者 data/app 都是应用程序包名命名的。PackageManager pm = MenuActivity.this.getPackageManager(); Intent i = pm.getLaunchIntentForPackage("roman10.tutorial.android_ffmpeg_tutorial02"); MenuActivity.this.startActivity(i);
还可以通过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
更多推荐
所有评论(0)