在自己的应用中启动另外一个应用,随便说一下,发现一个秘密,就是当应用没退出的时候,启动就会变成关闭!!!

// Intent intent = new Intent();

// PackageManager packageManager = context.getPackageManager();

// intent = packageManager.getLaunchIntentForPackage(context.getPackageName());

// intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK|Intent.FLAG_ACTIVITY_RESET_TASK_IF_NEEDED | Intent.FLAG_ACTIVITY_CLEAR_TOP) ;

// context.startActivity(intent);

context.getPackageName()得到的是自己应用程序的包名,也可以直接用包名比如“cn.cntv”,想启动那个应用就用哪个应用的包名,前提是你得知道这个应用的包名。

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

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

直接像下面就行:
[html] 
Intent intent = new Intent(Intent.ACTION_MAIN); 
intent.addCategory(Intent.CATEGORY_LAUNCHER);             
ComponentName cn = new ComponentName(packageName, className);             
intent.setComponent(cn); 
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); 
            } 
    }

时间: 2024-08-25 11:39:35

在自己的应用中启动另外一个应用,随便说一下,发现一个秘密,就是当应用没退出的时候,启动就会变成关闭!!!的相关文章

2016最后一贴,终于调通一个测试示例,并发现一个BUG???

真的难点在于第一次调通.纠结五天,终于搞出界面. 也发现了一个书上代码,编辑用户时死活不通的情况,我将Links去了,改在data里,我X,,全OK了.. 原来的代码: onAdd: function(button, e, options){ this.createDialog(null); }, onEdit: function(button, e, options){ var me = this, records = me.getRecordsSelected(); if(records[0

WinXP 无线技巧“区域没有通过无线网络中的发现”一个可能的原因!

貌似WinXP经典或无限.我一直沿用至今,我不知道这一天会放弃. 遇到的问题,也许有XP爱好者都遇到过还得看,写下一点文字注释.----------------------- 切割线 ----------------------家里台式机接无线USB网卡 TL-WN821N 之前一直都是好好的,今天接上去,居然提示"区域中找不到无线网络".以下是解决这问题的简单过程...... 据资料说是 WinXP 的 "Wireless Zero Configuration"

javascript中如何让两个radio同时只能选中一个

<html> <head> <title>测试</title> </head> <body leftmargin="0" topmargin="0"> <form> <input type="radio" name="sex1" value="male">Male <br> <input typ

QT模态对话框用法(在UI文件中设置Widget背景图,这个图是一个带阴影边框的图片——酷)

QT弹出模态对话框做法: 1.新建UI文件时,一定要选择基类是QDialog的,我的选择是:Dialog without Buttons(),如下图: 2.然后在使用的时候: MyDialog dlg(this); dlg.exec(); 如果不加this,则会在任务管理器里面产生一个新的EXE. 3.如果对话框的标题是自定义,不想使用系统的标题,这时候需要在代码中加入: setWindowFlags(Qt::Dialog | Qt::FramelessWindowHint ); setAttr

输入6个人的成绩放入到一个一维数组中,然后打印出平均分,最后按成绩 从大到小打印。三个功能(输入是一个函数,求平均分是一个函数,排序是一个 函数)都用函数实现,最后在main方法中调用。

/*5.输入6个人的成绩放入到一个一维数组中,然后打印出平均分,最后按成绩从大到小打印.三个功能(输入是一个函数,求平均分是一个函数,排序是一个函数)都用函数实现,最后在main方法中调用.*/ #include <stdio.h> int inputScore(){ int score; scanf("%d",&score); return score;} double avg(int scores[],int length){ int i,score = 0;

向数据库中插入一个DateTime类型的数据到一个Date类型的字段中,需要转换类型。TO_DATE(&#39;{0}&#39;,&#39;YYYY-MM-DD&#39;))

需要指出的是,C#中有datetime类型,但是这个类型是包括小时,分钟,秒的.这个格式与数据库中的Date类型不符,如果将now设为datetime类型插入数据会失败. 需要通过TO_DATE('字段','YYYY-MM-DD'))转换.如下: string.Format("insert into tablename (TIME) values(TO_DATE('{0}','YYYY-MM-DD'))",now) 错误写法: string.Format("insert in

C#中关闭第一个Form窗口,打开另一个新窗口方法

很多同学问怎么关闭一个FORM打开另一个新Form.这个问题最多的是在做登录验证时,使用第一个登录窗 登录成功后要关闭自己,然后打开新窗显示.没想到这个问题在.Net还成了问题,不过依然有很多方法解决. 典型的 Form1 f = new Form1(); f.Show(); this.Close(); 最后的关闭时把整个程序都关闭了 1隐藏法,原理就是把旧窗口隐藏掉,再打开新窗口. //新建一个NewForm窗口(NewForm是自己定义的Form) NewForm fm=new NewFor

RDP 协议组件 X.224 在协议流中发现一个错误并且中断了客户端连接

如果你的服务器有如下错误: “RDP 协议组件 X.224 在协议流中发现一个错误并且中断了客户端连接.” 可能的有2种: 1:你试试能否能继续远程登陆,有可能你的远程登陆组件出现问题. 2:有人攻击你,使用暴力破解的方法登陆你的系统,导致系统拒绝服务. 一句话注意防贼!! 解决方法: 设置组策略=====>管理摸板=====>wndows组件====>终端服务!! 新的补充(比较狠的解决方法,呵呵.): 事件类型: 错误 事件来源: TermDD 描述: RDP 的 "DAT

易宝典文章——玩转Office 365中的Exchange Online服务 之二 怎样申请一个Office 365企业(试用)账户

玩转Office 365中的Exchange Online服务 之二 怎样申请一个Office 365企业(试用)账户 前面简单介绍了Office 365和Exchange Online.也就是说,可以给客户或公司老板推荐这个产品.但是,需要更有说服力的演示和客户体验才能打动甲方或老板. 对于前期体验和评估来讲,如果直接订阅一个正式版,会带来过高的评估成本,即使是订阅最廉价的版本,往往在企业采购前期评估中也会是困难重重,很多时候会直接导致项目的夭折. 幸运的是,对于Office 365来讲,可以

【c语言】输入一个递增排序的数组的一个旋转,输出旋转数组中的最小元素

//旋转数组的最小数字 //题目:把一个数组最開始的若干个元素搬到数组的末尾.我们称之为数组的旋转. //输入一个递增排序的数组的一个旋转.输出旋转数组中的最小元素. //比如:数组{3.4,5,1,2}为{1,2.3.4.5}的一个旋转,最小元素是1. #include <stdio.h> #include <assert.h> int min_equ(int *src, int left, int right) { int i = 0; int ret = src[left];