(一) 通过包名、类名

开发有时需要在一个应用中启动另一个应用,比如Launcher加载所有的已安装的程序的列表,当点击图标时可以启动另一个应用。一般我们知道了另一个应用的包名和MainActivity的名字之后便可以直接通过如下代码来启动:

  1. Intent intent = new Intent(Intent.ACTION_MAIN);
  2. intent.addCategory(Intent.CATEGORY_LAUNCHER);
  3. ComponentName cn = new ComponentName(packageName, className);
  4. intent.setComponent(cn);
  5. startActivity(intent);

但是更多的时候,我们一般都不知道目标应用程序的启动Activity的类名,而只知道包名,接下来就需要这么做了,我封装成了一个方法,如下所示:

    1. private void doStartApplicationWithPackageName(String packagename) {
    2. // 通过包名获取此APP详细信息,包括Activities、services、versioncode、name等等
    3. PackageInfo packageinfo = null;
    4. try {
    5. packageinfo = getPackageManager().getPackageInfo(packagename, 0);
    6. } catch (NameNotFoundException e) {
    7. e.printStackTrace();
    8. }
    9. if (packageinfo == null) {
    10. return;
    11. }
    12. // 创建一个类别为CATEGORY_LAUNCHER的该包名的Intent
    13. Intent resolveIntent = new Intent(Intent.ACTION_MAIN, null);
    14. resolveIntent.addCategory(Intent.CATEGORY_LAUNCHER);
    15. resolveIntent.setPackage(packageinfo.packageName);
    16. // 通过getPackageManager()的queryIntentActivities方法遍历
    17. List<ResolveInfo> resolveinfoList = getPackageManager()
    18. .queryIntentActivities(resolveIntent, 0);
    19. ResolveInfo resolveinfo = resolveinfoList.iterator().next();
    20. if (resolveinfo != null) {
    21. // packagename = 参数packname
    22. String packageName = resolveinfo.activityInfo.packageName;
    23. // 这个就是我们要找的该APP的LAUNCHER的Activity[组织形式:packagename.mainActivityname]
    24. String className = resolveinfo.activityInfo.name;
    25. // LAUNCHER Intent
    26. Intent intent = new Intent(Intent.ACTION_MAIN);
    27. intent.addCategory(Intent.CATEGORY_LAUNCHER);
    28. // 设置ComponentName参数1:packagename参数2:MainActivity路径
    29. ComponentName cn = new ComponentName(packageName, className);
    30. intent.setComponent(cn);
    31. startActivity(intent);
    32. }
    33. }

(二)通过action

(三)传参数: http://www.aboutit.cn/post/195

启动另一个app的更多相关文章

  1. Android项目实战(二十二):启动另一个APP or 重启本APP

    一.启动另一个APP 目前公司项目需求,一个主APP,需要打开某些小APP,这些小APP是整合了Unity的,但是还是android程序(所有小APP的包名是已知的). 以前没做过,查询了一下实现方法 ...

  2. Android 一个app启动另一个app

    最近,一个app启动另一个app,这个玩法挺火的嘛,有没有试过更新QQ到5.1版本,QQ的健康里面就可以添加其他app,实现从QQ跳转到其他app应用.这个挺好玩的,一下子带来了多少流量啊. 一.先来 ...

  3. ios 一个app启动另一个app

    问题描述:需要从一个ios应用程序中,能启动另一个ios应用程序. 开发环境:xcode7.3.1 关键词:白名单(LSApplicationQueriesSchemes).注册自己的URL Demo ...

  4. Android在应用中依据包名启动另外一个APP

    以下为TestIntentData工程 MainActivity如下: package cn.testintentdata; import java.util.List; import android ...

  5. Android启动另一个APP时,注意disable与enable的问题

    在写游戏sdk时候遇到了一个需要在sdk中通过scheme来启动支付宝的免密支付功能,所以需要在设备中通过包名检查一下支付宝是否存在. 此时遇到了一个问题,在三星设备中可以将app给处于disable ...

  6. Android在一个APP中通过包名或类名启动另一个APP

    开发有时需要在一个应用中启动另一个应用,比如Launcher加载所有的已安装的程序的列表,当点击图标时可以启动另一个应用.一般我们知道了另一个应用的包名和MainActivity的名字之后便可以直接通 ...

  7. Windows Phone 8 通过一个app启动另一个app

    Winphone8 通过app启动第三方app需要被启动的app支持,具体操作步骤如下: 假设要通过PhoneApp2启动PhoneApp1 PhoneApp1端做的操作如下: 1.注册Protoco ...

  8. Android 中如何从一个App启动另外一个App(如启动支付界面、启动地图界面、应用商场下载App等场景)

    假定两个App,分别是A和B,当A运行某个功能需要启动B,一种是启动B应用,一种直接进入B的某个Activity.搜了很多资料,没有一个完整的.下面就A--Android5.1.1.B--Androi ...

  9. Appium之启动第一个App

    搭建appium自动化环境真是各种问题呀. 如何启动在真机上启动App? 执行操作:操作Android真机上打开手机淘宝app,并搜索“熊猫”. 脚本源码如下: from appium import ...

随机推荐

  1. Eclipse 不能build, pom文件上面有叉叉 解决办法

    Error message:   [html] view plaincopy execution not covered by lifecycle configuration: org.apache. ...

  2. [na]计算机网络性能指标(延迟/吞吐量/RTT等)

    参考 计算机网络性能指标 计算机网络性能指标 带宽.速率.延迟.吞吐量.丢包率(无线验收标准一般-75dbm,del<100ms,丢包率3%) 带宽x延迟 决定着路上的数据的多少. 速率: 连接 ...

  3. 【Unity】7.5 移动设备输入

    分类:Unity.C#.VS2015 创建日期:2016-04-21 一.简介 在iOS和Android系统中,操作都是通过触摸来完成的.Input类中对触摸操作的方法或变量如下图所示: 通过GetT ...

  4. 添加多个CCArmature

    CCArmatureDataManager::sharedArmatureDataManager()-> addArmatureFileInfo("armature\\Cowboy0. ...

  5. 【Acm】算法之美—Crashing Balloon

    题目概述:Crashing Balloon On every  June 1st, the Children's Day, there will be a game named "crash ...

  6. Asp.Net正则获取链接地址

    string html = “html代码”; Regex reg = new Regex(@"(?is)<a[^>]*?href=(['""]?)(?< ...

  7. EntityFramework安装和EF升级方法

    例如:如何在vs2010上安装EntityFramework5.0? 首先,需要安装一个vs插件,名称为NuGet Package Manager,微软官方发布的,其作用就是为vs工程项目自动下载.安 ...

  8. 在java代码中,用xslt处理xml文件

    http://blog.csdn.net/zhou_lei/article/details/2661735 ********************************************** ...

  9. csu1356 :判断一个环是否为奇数环

    http://acm.csu.edu.cn/OnlineJudge/problem.php?id=1356 题意:给出一个起始点,一些边,有人从这个起始点开始随意走,问在某一个时候,它是否可以处于任意 ...

  10. easyui扩展

    datagrid行内编辑时为datetimebox $.extend($.fn.datagrid.defaults.editors, { datetimebox: {// datetimebox就是你 ...