看到别人做的游戏攻略,想着自己的游戏攻略也加入新的功能,即Android中怎样在应用A中启动或安装应用B。就查了一些资料整理下来.

启动或安装对应的应用的方法:

Step1:推断是否安装目标应用。仅仅要知道目标应用的安装包名就能够通过推断"/data/data/packagename"是否存在来实现。

/** 

 * 推断是否安装目标应用 

 * @param packageName 目标应用安装后的包名 

 * @return 是否已安装目标应用 

 * @author zuolongsnail 

 */  

private boolean isInstallByread(String packageName) {  

    return new File("/data/data/" + packageName).exists();  

}

Step2:目标应用已安装则启动。否则先安装。

/** 

 * 先推断是否安装。已安装则启动目标应用程序,否则先安装 

 * @param packageName 目标应用安装后的包名 

 * @param appPath 目标应用apk安装文件所在的路径 

 * @author zuolongsnail 

 */  

private void launchApp(String packageName, String appPath) {  

    // 启动目标应用  

    if (isInstallByread(packageName)) {  

        // 获取目标应用安装包的Intent  

        Intent intent = getPackageManager().getLaunchIntentForPackage(  

                packageName);  

        startActivity(intent);  

    }  

    // 安装目标应用  

    else {  

        Intent intent = new Intent();  

        // 设置目标应用安装包路径  

        intent.setDataAndType(Uri.fromFile(new File(appPath)),  

                "application/vnd.android.package-archive");  

        startActivity(intent);  

    }  

}

推断应用是否安装或者是否为最新版本号

在我们安装应用的时候有时须要检查应用是否安装,未安装则安装。旧版本号则覆盖安装。

/** 推断是否安装或覆盖安装的类型*/

private static final int NOTINSTALL = 0; // 未安装

private static final int INSTALLED = 1; // 已安装且为新版本号

private static final int OLDVERSION = 2; // 已安装但为旧版本号

/**

 * 推断应用是否安装或者是否为最新版本号

 * @param packageName 目标应用安装后的包名

 * @param versionCode 指定的应用版本

 * @return 安装的类型

 * @author zuolongsnail 

 */

private int isInstallByread(String packageName, int versionCode){

// 推断是否安装

if(new File("/data/data/" + packageName).exists()){

// 获取系统中安装的全部应用包名集合

List<PackageInfo> packages = getPackageManager().getInstalledPackages(0);

for(int i=0;i<packages.size();i++){

PackageInfo packageInfo = packages.get(i);

// 找出指定的应用

if(packageName.equals(packageInfo.packageName)){

if(packageInfo.versionCode >= versionCode){

return INSTALLED;

}else{

return OLDVERSION;

}

}

}

}

return NOTINSTALL;

}

上面程序中的versionCode是在Manifest.xml文件里的Manifest标签中配置的,表示应用的版本。

Android中怎样在应用A中启动或安装应用B的更多相关文章

  1. Android ADT中增大AVD内存后无法启动:emulator failed to allocate memory 8 (转)

    Android ADT中增大AVD内存后无法启动:emulator failed to allocate memory 8http://www.crifan.com/android_emulator_ ...

  2. 【已解决】Android ADT中增大AVD内存后无法启动:emulator failed to allocate memory 8

    [问题] 折腾: [已解决]Android ADT中增大AVD内存后无法启动:emulator failed to allocate memory 8 过程中,增大对应AVD的内存为2G后,结果无法启 ...

  3. 【已解决】Android ADT中增大AVD内存后无法启动:emulator failed to allocate memory

    [已解决]Android ADT中增大AVD内存后无法启动:emulator failed to allocate memory 结论是: 当前有个bug: 默认是通过 hw.ramSize=1024 ...

  4. [Android]ListView的Adapter.getView()方法中延迟加载图片的优化

    以下内容为原创,欢迎转载,转载请注明 来自天天博客:http://www.cnblogs.com/tiantianbyconan/p/4139998.html 举个例子吧,以好友列表为例 ListVi ...

  5. Android开发面试经——4.常见Android进阶笔试题(更新中...)

      Android开发(29)  版权声明:本文为寻梦-finddreams原创文章,请关注:http://blog.csdn.net/finddreams 关注finddreams博客:http:/ ...

  6. Android总结篇系列:Activity中几个主要函数详解

    Activity作为Android系统中四大基本组件之一,包含大量的与其他的各大组件.intent.widget以及系统各项服务等之间的交互的函数.在此,本文主要选取实际项目开发中常用的,但完全理解又 ...

  7. Android插件化的兼容性(中):Android P的适配

    Android系统的每次版本升级,都会对原有代码进行重构,这就为插件化带来了麻烦. Android P对插件化的影响,主要体现在两方面,一是它重构了H类中Activity相关的逻辑,另一个是它重构了I ...

  8. Android Application中的Context和Activity中的Context的异同

    一.Context是什么: 1.Context是维持Android程序中各组件能够正常工作的一个核心功能类,我们选中Context类 ,按下快捷键F4,右边就会出现一个Context类的继承结构图啦, ...

  9. android 编程小技巧(持续中)

    first:     Intent跳转一般存用于Activity类,可是若要在非activity类里跳转的话,解决方法是在startActivity(intent)前加mContext即上下文,终于为 ...

随机推荐

  1. 开源数据库连接池之C3P0

    本篇介绍几种开源数据库连接池,同时重点讲述如何使用C3P0数据库连接池. 之前的博客已经重点讲述了使用数据库连接池的好处,即是将多次创建连接转变为一次创建而使用长连接模式.这样能减少数据库创建连接的消 ...

  2. Windows Azure入门教学系列 (七):使用REST API访问Storage Service

    本文是Windows Azure入门教学的第七篇文章. 本文将会介绍如何使用REST API来直接访问Storage Service. 在前三篇教学中,我们已经学习了使用Windows Azure S ...

  3. java内存模型与线程(转) good

    java内存模型与线程 参考 http://baike.baidu.com/view/8657411.htm http://developer.51cto.com/art/201309/410971_ ...

  4. 循环json数据的列

    var len = json.length;  for (var i = 0; i < len; i++)  {   for (obj in json[i])   {    var obj2 = ...

  5. CentOS6.4 安装Mysql

    虽说,新版的数据包可能会带上一些新特性,但是数据库对我而言,还是稳定版优先.因为新特性不一定我会用到.. 下载安装: yum list | grep mysql 因为是准备搞开发用的,所以只要安装my ...

  6. Delphi图像处理 -- 最小值

    阅读提示:     <Delphi图像处理>系列以效率为侧重点,一般代码为PASCAL,核心代码采用BASM.     <C++图像处理>系列以代码清晰,可读性为主,全部使用C ...

  7. CSipSimple最新版本号

    要使用CSipSimple有两种方法:第一种是不编译jni,另外一种是编译jni. 这里介绍的是第一种:不编译jni. 首先,用SVNclient检出CSipSimple源代码:svn checkou ...

  8. D3D 练习小框架

    自己练习D3D 程序搭的小框架,记录在这里,将来看到好回顾自己独自摸索的苦逼样子. #pragma once #pragma comment(lib,"d3d9.lib") #pr ...

  9. Coins (poj 1742 &amp;&amp; hdu 2844 DP)

    Language: Default Coins Time Limit: 3000MS   Memory Limit: 30000K Total Submissions: 30047   Accepte ...

  10. Android应用开发学习笔记之绘图

    作者:刘昊昱 博客:http://blog.csdn.net/liuhaoyutz 一.绘图常用类介绍 在Android中绘图时,常用到的几个类是Paint.Canvas.Bitmap和Bitmapt ...