看到别人做的游戏攻略,想着自己的游戏攻略也加入新的功能,即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. MSSQL - 存储过程Return返回值

    1.存储过程中不使用外部参数. 存储过程: SET ANSI_NULLS ON GO SET QUOTED_IDENTIFIER ON GO -- ========================== ...

  2. 点击得到QTableWidget中任意位置QPushButton的行列信息

    http://www.qtcn.org/bbs/read-htm-tid-51835.html http://www.qtcn.org/bbs/simple/?t43841.html 比如(点击每行最 ...

  3. 九度OnlineJudge之1020:最小长方形

    题目描述:     给定一系列2维平面点的坐标(x, y),其中x和y均为整数,要求用一个最小的长方形框将所有点框在内.长方形框的边分别平行于x和y坐标轴,点落在边上也算是被框在内. 输入:      ...

  4. MapReduce整体架构分析

    继前段时间分析Redis源代码一段时间之后.我即将開始接下来的一段技术学习的征程.研究的技术就是当前很火热的Hadoop,可是一个Hadoop生态圈是很庞大的.所以首先我的打算是挑选当中的一部分模块, ...

  5. Tomcat 用户配置

    如果你没有改变任何配置文件,请检查文件conf / tomcat用户.xml在你安装.该文件必须包含凭证让你使用这个应用. 例如,添加一个用户名为tomcat manager gui角色s3cret密 ...

  6. CDialogBar(对话条)和CReBar(伸缩条)的编程

    对话条是工具栏和无模式对话框相结合的产物,对话条和对话框类似,包含有标准的Windows控件,并且可以通过创建对话框模板来表示对话条. 伸缩条功能很强大,我们可以在伸缩条中直接增加CToolBar,C ...

  7. 一劳永逸解决UAC问题(修改QMAKE_LFLAGS_EXE的设置)

    如果你的程序跑在一个开启了UAC保护的系统中,而你的程序又没有"盾牌"的话,程序总是会受到各种阻挠的,比如读写文件,写注册表等. 有了"盾牌"的话就不会出现一些 ...

  8. AngularJs 父子级Controller传递数据

    <div ng-controller="MyAccountCtrl"> <div ng-controller="TransferCtrl"&g ...

  9. 如何关闭android studio开发环境自动保存

    使用DW习惯了现在转到学习开发android,请问怎样关闭android studio的自动保存功能,然后按ctrl+s进行保存,因为有时候代码不想让其保存,他也自动保存了. File -> S ...

  10. html5实现拖拽文件上传

    以下是自学it网--中级班上课笔记 网址:www.zixue.it html文件 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict ...