如何在android应用程序中启动其他apk程序,被启动程序退出后返回之前的程序?

richardor 发布于 2012/01/13 17:07
阅读 30K+
收藏 17
如何在android应用程序中启动其他apk程序,被启动程序退出后返回之前的程序?

以下是问题补充:

@dogdog:大家好,不知道这个问题楼主解决了吗?我现在遇到同样的情况,进入一个新的apk 后,点击后退,新的 apk 是退出了,同时也将之前的apk也退出了,回到了桌面。郁闷,怎么才能只退出新的apk,而回到之前的那个apk界面呢 (2013/05/05 15:00)
加载中
3
虫虫
虫虫
Android 开发有时需要在一个应用中启动另一个应用,比如Launcher加载所有的已安装的程序的列表,当点击图标时可以启动另一个应用。
一般我们知道了另一个应用的包名和MainActivity的名字之后便可以直接通过如下代码来启动:
Intent intent = new Intent(Intent.ACTION_MAIN);
intent.addCategory(Intent.CATEGORY_LAUNCHER);           
ComponentName cn = new ComponentName(packageName, className);           
intent.setComponent(cn);
startActivity(intent);
但是更多的时候,我们一般都不知道应用程序的启动Activity的类名,而只知道包名,我们可以通过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);
}
}
0
richardor
richardor
谢谢,就是这样的
0
2
23snyga

这个只是实现启动其它APK 应用的功能吧?

被启动程序退出后,如何返回前一应用呢???

纠结啊,一下全都退出了,有木有?

m
mickel
你检查一下原来那个apk里startActivity后有没有finish(),一般不加入finish()原来那个apk不会自动退出的
0
h
handy0529
楼主地8行pm是什么
汤贵祥
汤贵祥
看名字一定是context.PackageManager();
0
z
zionchao

需要在启动时添加一个flag:

 Intent intent=new Intent();  
intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
  intent.setComponent(new ComponentName(objAppClassName, mainActivity)); 
         context.startActivity(intent);

这样做就可以

0
念芸

引用来自“尐帥鱼”的答案

pm是从哪里出来的?
getpackagemanager
0
roadprogram
roadprogram
真是好详细的说,支持下
0
乆丩
乆丩
你只需要在A中打开B,并为B设置 intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);  不做对A的关闭处理  这样就可以了
0
未来依旧美好
解决了我的问题,感谢感谢
OSCHINA
登录后可查看更多优质内容
返回顶部
顶部