看到别人做的游戏攻略,想着自己的游戏攻略也加入新的功能,即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. nginx使用自认证的https证书

    生成证书 可以通过以下步骤生成一个简单的证书: 创建服务器私钥: $ openssl genrsa -out server.key 2048 需要输入一系列的信息 创建签名请求的证书(CSR): $ ...

  2. LINQ to SQL的一些简单用法

    static void Main(string[] args) { var personList = new List<Person> { new Person() { PersonID= ...

  3. CSS未知div高度垂直居中代码_层和布局特效

    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...

  4. eclipse插件maven的使用,web打包成WAR,tomcat下直接运行

    1.首先下载maven  其下载地址为:http://maven.apache.org/download.html   下载apache-maven-3.0.3-bin.zip 环境变量配置为  变量 ...

  5. perl 继承概述

    <pre name="code" class="html">[root@wx03 test]# cat Horse.pm package Horse ...

  6. Zookeeper从入门到精通(开发详解,案例实战,Web界面监控)

    ZooKeeper是Hadoop的开源子项目(Google Chubby的开源实现),它是一个针对大型分布式系统的可靠协调系统,提供的功能包括:配置维护.命名服务.分布式同步.组服务等. Zookee ...

  7. HTTP数据包头解析(简单清楚)

    [转]HTTP请求模型和头信息参考 参考: http://blog.csdn.net/baggio785/archive/2006/04/13/661410.aspx模型: http://blog.c ...

  8. 14.9.4 COMPACT and REDUNDANT Row Formats

    14.9.4 COMPACT and REDUNDANT Row Formats InnoDB 早期的版本 使用一种未命名的文件格式(现在称为Antelope(羚羊)) 对于数据库文件 在这种文件格式 ...

  9. WITH+HInt MATERIALIZE 不见得有效

    那个要多次调用才需要物化的. 只调用一次,物化没用 MATERIALIZE  语法:MATERIALIZE  描述:指示优化器将内联视图实体化————执行过程中会创建基于视图的临时表. with dd ...

  10. MapReduce调度与执行原理之作业初始化

    前言 :本文旨在理清在Hadoop中一个MapReduce作业(Job)在提交到框架后的整个生命周期过程,权作总结和日后参考,如有问题,请不吝赐教.本文不涉及Hadoop的架构设计,如有兴趣请参考相关 ...