Android中如何在应用A中启动或安装应用B

看到别人做的游戏攻略,想着自己的游戏攻略也添加新的功能,即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

时间: 2024-10-10 00:03:40

Android中如何在应用A中启动或安装应用B的相关文章

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

过程中,增大对应AVD的内存为2G后,结果无法启动AVD了: [2012-12-18 18:01:38 – Emulator] Failed to allocate memory: 8 [2012-12-18 18:01:38 – Emulator] [2012-12-18 18:01:38 – Emulator] This application has requested the Runtime to terminate it in an unusual way. [2012-12-18 1

Android Service组件在新进程中的启动过程

1.startService 在Android系统匿名共享内存(Anonymous Shared Memory)Java调用接口分析,http://blog.csdn.net/jltxgcy/article/details/31414509一文,Client调用了如下代码: public class Client extends Activity implements OnClickListener { public void onCreate(Bundle savedInstanceState

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

专注Android领域开发. 仰望星空,同时需要脚踏实地. ——好记性不如烂博客 Android总结篇系列:Activity中几个主要函数详解 Activity作为Android系统中四大基本组件之一,包含大量的与其他的各大组件.intent.widget以及系统各项服务等之间的交互的函数.在此,本文主要选取实际项目开发中常用的,但完全理解又需要有一定深入了解的几个函数进行讲解,后续本文会根据需要不断更新. 1. startActivityForResult / onActivityResult

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

Android开发(29)  版权声明:本文为寻梦-finddreams原创文章,请关注:http://blog.csdn.net/finddreams 关注finddreams博客:http://blog.csdn.net/finddreams/article/details/44301359 上一篇文章我们已经了解了Android笔试的一些基础题目, [<Android开发面试经——2.常见Android基础笔试题> ] (http://blog.csdn.net/finddreams/a

Android借助Handler,实现ViewPager中页面的自动切换(转)

在很多电商网页及app上都有自动切换的商品的推广快,感觉体验挺不错的,正好今天学习使用ViewPager,因此也实现了一个功能类似的demo. 下面是其中的两个截图:           实现一个自动播放功能的ViewPager,要做的主要有以下的几个部分: 实现一个ViewPagerAdapter,用于为ViewPager提供展示内容(例如上面的两张小猫图片) public class ViewPagerAdapter extends PagerAdapter { private List<V

android 编程小技巧(持续中)

first: Intent跳转一般存用于Activity类,但是若要在非activity类里跳转的话,解决方法是在startActivity(intent)前加mContext即上下文,最终为:mContext.startActivity(intent);  换言之,以后在非activity类里调用activity的方法  一律这么做.若不行的话 可以这么做:(Activity)mContext. second: gridview中textview内容不能居中的问题.gridview中可以设置一

我的Android笔记--Intent下,印象中常用的用法

1,拨打电话 Intent intent = new Intent(Intent.ACTION_DIAL); Uri uri = Uri.parse("tel:" + "1511690XXXX"); intent.setData(uri); startActivity(intent); 2,发送短信 Uri uri = Uri.parse("smsto:1511690XXXX"); Intent intent = new Intent(Inten

Android学习笔记之mainfest文件中android属性

Android学习笔记之mainfest文件中android属性 - Impossible is nothing - 博客频道 - CSDN.NET 以前的零散笔记, 共享一下, 有错误的地方还请指正. android:allowTaskReparenting 是否允许activity更换从属的任务,比如从短信息任务 切换到浏览器任务.---------------------------------------------------------------------------------

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

Android系统的每次版本升级,都会对原有代码进行重构,这就为插件化带来了麻烦. Android P对插件化的影响,主要体现在两方面,一是它重构了H类中Activity相关的逻辑,另一个是它重构了Instrumentation. 3.1 H类的变身 3.1.1 从Message和Handler说起 对于App开发人员而言,Message和Handler是耳熟能详的两个概念.我们简单回顾一下,一条消息是怎么发送和接收的. 首先,在App启动的时候,会创建ActivityThread,这就是主线程