看到别人做的游戏攻略,想着自己的游戏攻略也加入新的功能,即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. linux命令:scp

    有时候ftp被禁用了, 就用scp替代; 命令行: scp from to_user@to_ip:dir_to/file_name 执行该命令之后,按照提示输入to_host的登陆密码即可. scp ...

  2. Delphi 10.1说明

    发布说明:http://docwiki.embarcadero.com/RADStudio/Berlin/en/Main_Page更新说明:http://docwiki.embarcadero.com ...

  3. 用内存流 文件流 资源生成客户端(Delphi开源)

    正文:很多木马生成器就是用的内存流和文件流生成客户端的,废话不多说了,代码如下: unit Main; interface usesWindows, Messages, SysUtils, Varia ...

  4. windows 2003 域控制器(AD)的常规命令行操作以及修复

    查询服务器的角色 Netdom query fsmo 强制升级操作主机角色(如果两台DC都无损,可以直接用图形模式传送,这里指的是一台DC出问题,另一台强制升级占用角色的情况) Ntdsutil Ro ...

  5. PHP学习之-1.7 注释

    注释 在PHP中也有注释语句:用双斜杠 "//" 来表示.其他语言中 HTML使用 "<!--  -->" ,CSS中使用 "/*     ...

  6. 隐藏AutoCompleteTextView下拉框的滚动条

    最近做项目需要用到AutoCompleteTextView这个控件,而其下拉框的滚动条有点难看,于是想去掉.走了些弯路,终于弄通了. 首先先介绍一种不靠谱的方法:反射机制 为什么会有人想到用这个呢? ...

  7. Sencha app build 出现 missing name after . operator 问题

    此问题是在使用sencha app build命令后出现得 主要是 YUI Compressor压缩的时候,代码中出现了delete, interface之类的keyword导致的. 此时能够在Web ...

  8. 男性在下一100层【第三层】——高仿手机银行client接口

    前言: 从<男性在下一100层>系列博文[二楼]现在出版了整整三个月后,.从上述观点和这么多朋友的意见还是比较喜欢真实类的博文. 毕竟我们都叫"攻城狮".所以要看是否这 ...

  9. OCP-1Z0-051-题目解析-第33题

    33. You want to create an ORD_DETAIL table to store details for an order placed having the following ...

  10. cms配置使用

    在早期完成了页面的切图之后,需要配置cms来实现小编上传数据更新页面的流程,在取得SEO的官网URL规则之后,就能开始官网在cms的基本配置了. 下面介绍cms的特点: 类别,决定内容与内容对应的路径 ...