在程序开发过程当中,常遇到需要启动另一个应用程序的情况,比如在点击软件的一个按钮可以打开地图软件。

如果既有包名又有主类的名字,那就好 办了,

直接像下面就行:

[html] 

Intent intent = new Intent(Intent.ACTION_MAIN); 

intent.addCategory(Intent.CATEGORY_LAUNCHER);             

ComponentName cn = new ComponentName(packageName, className);             

intent.setComponent(cn); 

startActivity(intent);

或者这样:

Intent intent = new
Intent();
  PackageManager packageManager =
this.getPackageManager();
  intent = packageManager.getLaunchIntentForPackage(packageName);
  intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK|Intent.FLAG_ACTIVITY_RESET_TASK_IF_NEEDED | Intent.FLAG_ACTIVITY_CLEAR_TOP) ;
  this.startActivity(intent);

一般情况下我们是不知道包名和类名的,那怎么办呢?

其实手机安装的每一个应用的包名都是可以查到的,只要我们查到相关应用的包名,再通过它获得主类名,再按照上面的方法就可以了。

第一步:怎么获得包名?

PackageManager packageManager = context.getPackageManager();

packageManager.getInstalledApplications(0);

这就得到了手机上安装的所有应用的程序信息,当然包括包名,只需要查找自己需要的程序就可以了。

下面给出一个完整的方法,以包名为参数,获取主类名之名再启动应用的具体方法:

[java] 

public static void openCLD(String packageName,Context context) { 

        PackageManager packageManager = context.getPackageManager(); 

        PackageInfo pi = null;    www.2cto.com

         

            try { 

                 

                pi = packageManager.getPackageInfo("cld.navi.mainframe", 0); 

            } catch (NameNotFoundException e) { 

                 

            } 

            Intent resolveIntent = new Intent(Intent.ACTION_MAIN, null); 

            resolveIntent.addCategory(Intent.CATEGORY_LAUNCHER); 

            resolveIntent.setPackage(pi.packageName); 

 

            List<ResolveInfo> apps = packageManager.queryIntentActivities(resolveIntent, 0); 

 

            ResolveInfo ri = apps.iterator().next(); 

            if (ri != null ) { 

                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); 

                context.startActivity(intent); 

            } 

    }

android 在一个应用中启动另一个应用的更多相关文章

  1. Android 在一个程序中启动另一个程序

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

  2. Android 在一个程序中启动另一个程序(包名,或者类名)

    http://hi.baidu.com/xiaofanqing/item/6fd724f7c5bb6dce531c26b7 Android 开发有时需要在一个应用中启动另一个应用,比如Launcher ...

  3. Android在一个app中启动另一个App

    Intent intent = new Intent(Intent.ACTION_MAIN); intent.addCategory(Intent.CATEGORY_LAUNCHER); Compon ...

  4. IOS在一个程序中启动另一个程序

    尽管iPhone不允许同时运行两个应用程序,我们可以从自己的应用程序中启动另一个应用程序,并且可以在应用程序之间共享数据.我们可以使用UIApplication类的openURL:方法从一个应用程序来 ...

  5. 在一个Activity中启动另一个Activity

    一.新建一个空的工程 二.添加一个Activity并命名为BAty 三.在activity_main.xml中添加一个按钮,设置id号为btnStartB <Button android:lay ...

  6. Android在一个Activity中关闭另一个Activity

    比如有ActivityA, ActivityB,在ActivityB中关闭ActivityA. 解决方案: 1.在 ActivityA 里面设置一个静态的变量instance,初始化为this,在 A ...

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

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

  8. 在android应用程序中启动其他apk程序

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

  9. 在一个apk中调用另外一个apk中的activity

    今天忽然想到如果要在一个activity中调用另外一个activity该怎么办呢? 感觉这个应该比较简单,应为activity的启动方式就两种:显式启动.隐式启动: 显式启动的话肯定不行,那就只能使用 ...

随机推荐

  1. Solidworks工程图如何使用,替换图纸格式模板文件

    1 如果你有了图纸模板(SLDDRW文件),比如下面的这个文件,则以后把零件的三维图拖放到里面就可以了.注意,这是最简单,最有效的方法,后面另存为的slddrt文件不好使,所以还不如把模板文件另存为S ...

  2. iPhone 适配之路

    (1)1x时代 2007年,初代iPhone公布,屏幕的宽高是320*480像素.这个分辨率一直到iPhone3GS也保持不变. 那时编写iOS的App应用程序.仅仅支持绝对定位. 比方一个butto ...

  3. 【分享】利用Apache的Htaccess Files命令限制訪问文件类型,Files正则

    假设你在你的模板目录中有非常多PSD HTML模板,那么用接下来这个htaccess文件能够保护限制訪问: 文件D:\WebSite\ZBPHP.COM\www\Tpl\.htaccess 所有源代码 ...

  4. 常见iOS面试题 之 怎么判断一个类是否遵循某个协议

    答案: 使用方法conformsToProtocol. 调用例子: BOOL isConform = [Student conformsToProtocol:@protocol(UIScrollVie ...

  5. Struts2学习(二)运行Action中方法的三种方式

    1.运行execute()方法 一般的能够直接在action中书写execute,调用action时会自己主动运行此方法 2.配置method方法 在struts.xml中配置action时.写met ...

  6. Linux启动过程笔记

    Linux启动过程 1.启动流程(BIOS->MBR:Boot Code->引导GRUB->载入内核->运行init->runlevel) 2./boot/grub/下有 ...

  7. HTTP的上传文件实例分析

    这个是http文件传输的一种格式,当时不知道这种格式,废弃. HTTP的上传文件实例分析 由于论坛不支持Word写文章发帖. 首先就是附件发送怎么搞,这个必须解决.论坛是php的.我用Chrome类浏 ...

  8. vue 开发前准备工作

    工欲善其事,必先利其器. 第一步,选择一个合适的编辑器: 看vue官网上,有推荐用HBuilder X这个编辑器,这个我在开发微信小程序的时候,就是用的这个编辑器,还可以,挺好用的,也可以用git做版 ...

  9. dsp端编译异常之max和min未定义

    (1)在函数之前 声明__stdcall 时 在linux 端或dsp端 linux 之前的加上宏定义 __stdcall是MS的编译器使用的只需要#define __stdcall定义一个宏就可以 ...

  10. 给EasyUi的Form加入自己主动填充部分输入框的方法

    依据项目须要,基于获取的数据对Form的部分输入框进行填充,而默认的EasyUI的Form 没有该方法.仅仅能一个输入框一个输入框的直接赋值,为此添加了Form对象的setValues,实现依据给定的 ...