在开发android应用的时候,在一些情况下要有前置条件,比如这边所说的要启动时要确保别的应用程序服务已经打开 或者在操作中启动别的应用等。
先来一段google上的代码:
1、 已知包名和类名的情况下:
Intent intent = new Intent(Intent.ACTION_MAIN); intent.addCategory(Intent.CATEGORY_LAUNCHER); //前面两个设置是为了调用该应用的主页 也就如C#或JAVA 常说的 MAIN函数入口 ComponentName cn = new ComponentName(packageName, className); //ComponentName优先于 action category data etc. intent.setComponent(cn); startActivity(intent);
主要是对intent的属性 ComponentName的设置;
这个方法的缺点是 必须知道该应用的pkg 也就是包名,以及activity的类名; 但是大多数情况下 我们并不知道第三方应用的包名等信息o(╯□╰)o
2、在不知道包名的情况需要用到android 的程序包管理器 PackageManager (还有我雪亮的近视眼)
// 启动iscan private void startIscan() { PackageManager pm=getPackageManager(); //获取程序包服务
// pm.getInstalledApplications(0); //由于不知道只知道第三方程序的名字,我就SB的用这个方法获取所有已安装程序的信息,然后用我的250读近视眼一个个查看~~ 终于找到需要的包名了 找到包名就非常好办了!!!
Intent intent = new Intent(); intent=pm.getLaunchIntentForPackage("com.iData.idata_iscan"); //这个方法直接返回 访问特定包名下activity或service etc.的入口的intent , 省去设置componentName的参数 startActivity(intent); // startService(intent) 为启动服务 }
两种方法都是通过intent来启动, 主要区别是intent的属性设置方法不同。 第一个是对ComponentName的设置 ,第二种是利用PackageManager来获取特定包名(包名也通过 pkgManager来获取) 的启动intent。