有时候一个应用需要启动另外一个应用来完成操作,比如在某些应用中打开闹钟,相机,日历等等。

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

Step1:判断是否安装目标应用。只要知道目标应用的安装包名就可以通过判断"/data/data/packagename"是否存在来实现。

  1. 01./**
  2. 02. * 判断是否安装目标应用
  3. 03. * @param packageName 目标应用安装后的包名
  4. 04. * @return 是否已安装目标应用
  5. 05. * @author zuolongsnail
  6. 06. */
  7. 07.private boolean isInstallByread(String packageName) {
  8. 08.    return new File("/data/data/" + packageName).exists();
  9. 09.}

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

  1. 01./**
  2. 02. * 先判断是否安装,已安装则启动目标应用程序,否则先安装
  3. 03. * @param packageName 目标应用安装后的包名
  4. 04. * @param appPath 目标应用apk安装文件所在的路径
  5. 05. * @author zuolongsnail
  6. 06. */
  7. 07.private void launchApp(String packageName, String appPath) {
  8. 08.    // 启动目标应用
  9. 09.    if (isInstallByread(packageName)) {
  10. 10.        // 获取目标应用安装包的Intent
  11. 11.        Intent intent = getPackageManager().getLaunchIntentForPackage(
  12. 12.                packageName);
  13. 13.        startActivity(intent);
  14. 14.    }
  15. 15.    // 安装目标应用
  16. 16.    else {
  17. 17.        Intent intent = new Intent();
  18. 18.        // 设置目标应用安装包路径
  19. 19.        intent.setDataAndType(Uri.fromFile(new File(appPath)),
  20. 20.                "application/vnd.android.package-archive");
  21. 21.        startActivity(intent);
  22. 22.    }
  23. 23.}

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

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

    1. 01./** 判断是否安装或覆盖安装的类型*/
    2. 02.private static final int NOTINSTALL = 0;    // 未安装
    3. 03.private static final int INSTALLED = 1;     // 已安装且为新版本
    4. 04.private static final int OLDVERSION = 2;    // 已安装但为旧版本
    5. 05./**
    6. 06. * 判断应用是否安装或者是否为最新版本
    7. 07. * @param packageName 目标应用安装后的包名
    8. 08. * @param versionCode 指定的应用版本号
    9. 09. * @return 安装的类型
    10. 10. * @author zuolongsnail
    11. 11. */
    12. 12.private int isInstallByread(String packageName, int versionCode){
    13. 13.    // 判断是否安装
    14. 14.    if(new File("/data/data/" + packageName).exists()){
    15. 15.        // 获取系统中安装的所有应用包名集合
    16. 16.        List<PackageInfo> packages = getPackageManager().getInstalledPackages(0);
    17. 17.        for(int i=0;i<packages.size();i++){
    18. 18.            PackageInfo packageInfo = packages.get(i);
    19. 19.            // 找出指定的应用
    20. 20.            if(packageName.equals(packageInfo.packageName)){
    21. 21.                if(packageInfo.versionCode >= versionCode){
    22. 22.                    return INSTALLED;
    23. 23.                }else{
    24. 24.                    return OLDVERSION;
    25. 25.                }
    26. 26.            }
    27. 27.        }
    28. 28.    }
    29. 29.    return NOTINSTALL;
    30. 30.}

http://blog.csdn.net/gf771115/article/details/6637693

Android 安装和启动另外一个应用的更多相关文章

  1. Android 通过广播启动另一个应用的Activity

    需求:现在有应用A和应用B,我需要在A应用中启动B应用中的某个Activity 实现:A应用中的Activity发送广播,关键代码如下: String broadcastIntent = " ...

  2. android应用如何启动另外一个apk应用

    在开发的过程中,经常会遇到在一个应用中启动另外一个apk应用的情况 问题的核心点在于我们要拿到第三方apk的package名称跟class名称, 如:package名称是com.funcity.tax ...

  3. Android项目实战(二十二):启动另一个APP or 重启本APP

    一.启动另一个APP 目前公司项目需求,一个主APP,需要打开某些小APP,这些小APP是整合了Unity的,但是还是android程序(所有小APP的包名是已知的). 以前没做过,查询了一下实现方法 ...

  4. Android 一个app启动另一个app

    最近,一个app启动另一个app,这个玩法挺火的嘛,有没有试过更新QQ到5.1版本,QQ的健康里面就可以添加其他app,实现从QQ跳转到其他app应用.这个挺好玩的,一下子带来了多少流量啊. 一.先来 ...

  5. Android 在一个程序中启动另一个程序

    Android 开发有时需要在一个应用中启动另一个应用,比如Launcher加载所有的已安装的程序的列表,当点击图标时可以启动另一个应用.一般我们知道了另一个应用的包名和MainActivity的名字 ...

  6. 【Android Developers Training】 4. 启动另一个Activity

    注:本文翻译自Google官方的Android Developers Training文档,译者技术一般,由于喜爱安卓而产生了翻译的念头,纯属个人兴趣爱好. 原文链接:http://developer ...

  7. Android 在一个程序中启动另一个程序(包名,或者类名)

    http://hi.baidu.com/xiaofanqing/item/6fd724f7c5bb6dce531c26b7 Android 开发有时需要在一个应用中启动另一个应用,比如Launcher ...

  8. Android学习笔记_70_一个应用程序启动另一个应用程序的Activity

    第一种(我自己写的) :之前在网上看来一些,很多不是我要的可以启动另外一个应用程序的主Activity. //这些代码是启动另外的一个应用程序的主Activity,当然也可以启动任意一个Activit ...

  9. Android 学习第9课,java android 项目的安装与启动过程

    android 安装过程: 开发工具先把.java文件转换成.class,然后转换成dx,再签名打包成apk,最后在设备上执行 adb install c:\xxx.apk android 启动过程: ...

随机推荐

  1. Alert Views

    Alert views display a concise and informative alert message to the user. Alert views convey importan ...

  2. java集合简介

    java集合主要包括以下几点 Java 集合概述 Collection 接口 Iterator 接口 Set List Map Collections 工具类 Enumeration 1.java集合 ...

  3. 什么是IP地址、子网掩码、路由和网关

    什么是IP地址.子网掩码.路由和网关?经常有朋友问我,的确这些术语常常被我们看到,今天就给大伙说说这几个术语的意思: 1.IP地址: IP地址有一个32位的连接地址,由4个8位字段组成,8位字段称为8 ...

  4. Windows消息传递机制具体解释

    林炳文Evankaka原创作品.转载请注明出处http://blog.csdn.net/evankaka Windows是一个消息(Message)驱动系统.Windows的消息提供了应用程序之间.应 ...

  5. CString与std::string unicode下相互转化

      1. CString to string CString str = L"test"; CString stra(str.GetBuffer(0)); str.ReleaseB ...

  6. Vim的多窗口模式管理

    Vim中的多窗口打开 vim中,默认的多窗口打开,是横向分割窗口. 进入vim编辑器以后,可以通过new命令,新建一个子窗口 :new  “新建一个未命名窗口 :new name "新建一个 ...

  7. mongodb入门教程二

    title: mongodb入门教程二 date: 2016-04-07 10:33:02 tags: --- 上一篇文章说了mongodb最基本的东西,这边博文就在深入一点,说一下mongo的一些高 ...

  8. codevs 1028 花店橱窗布置 (KM)

    /*裸地KM*/ #include<iostream> #include<cstdio> #include<cstring> #define maxn 110 #d ...

  9. SQL查询表字段、字段说明、类型、长度、主键

    SELECT  表名=d.name,case when a.colorder=1 then d.name else '' end, 字段序号=a.colorder, 字段名=a.name, 标识=ca ...

  10. solr单机版的搭建

    一.solr单机版的搭建 1.运行环境 solr 需要运行在一个Servlet容器中,Solr4.10.3要求jdk使用1.7以上,Solr默认提供Jetty(ja),本教va写的Servlet容器程 ...