关于android 应用中安装另一个应用 打开另一个应用 判断另一个应用是否安装

转载 2016年08月30日 20:02:45

转自:http://blog.csdn.net/jiaruoranshuai/article/details/48677375

1.在一个安卓应用中安装另一个android应用

Intent intent = new Intent(Intent.ACTION_VIEW);
intent.setDataAndType(Uri.fromFile(tempApk),"application/vnd.android.package-archive");
intent.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION);
intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
intent.setClassName("com.android.packageinstaller",    "com.android.packageinstaller.PackageInstallerActivity");
ctx.startActivity(intent);

2.获取一个apk文件的包名

PackageManager pm = context.getPackageManager();
PackageInfo info = pm.getPackageArchiveInfo(Constant.DOWNLOAD_DIR + "/" + functionalls.get(i).getId() + ".apk", PackageManager.GET_ACTIVITIES);//第一个参数是apk文件的路径
ApplicationInfo appInfo = null;
if (info != null) {
    appInfo = info.applicationInfo;
    String packageName = appInfo.packageName;    
}

3.启动另一个android应用(需要知道包名)

private void doStartApplicationWithPackageName(String packagename) {

    // 通过包名获取此APP详细信息,包括Activities、services、versioncode、name等等
    PackageInfo packageinfo = null;
    try {
        packageinfo = context.getPackageManager().getPackageInfo(packagename, 0);
    } catch (PackageManager.NameNotFoundException e) {
        e.printStackTrace();
    }
    if (packageinfo == null) {
        return;
    }

    // 创建一个类别为CATEGORY_LAUNCHER的该包名的Intent
    Intent resolveIntent = new Intent(Intent.ACTION_MAIN, null);
    resolveIntent.addCategory(Intent.CATEGORY_LAUNCHER);
    resolveIntent.setPackage(packageinfo.packageName);

    // 通过getPackageManager()的queryIntentActivities方法遍历
    List<ResolveInfo> resolveinfoList = context.getPackageManager()
            .queryIntentActivities(resolveIntent, 0);

    ResolveInfo resolveinfo = resolveinfoList.iterator().next();
    if (resolveinfo != null) {
        // packagename = 参数packname
        String packageName = resolveinfo.activityInfo.packageName;
        // 这个就是我们要找的该APP的LAUNCHER的Activity[组织形式:packagename.mainActivityname]
        String className = resolveinfo.activityInfo.name;
        // LAUNCHER Intent
        Intent intent = new Intent(Intent.ACTION_MAIN);
        intent.addCategory(Intent.CATEGORY_LAUNCHER);

        // 设置ComponentName参数1:packagename参数2:MainActivity路径
        ComponentName cn = new ComponentName(packageName, className);

        intent.setComponent(cn);
        startActivity(intent);
    }
}


4.判断一个apk文件是否已经安装成功(根据报名判断该应用是否已经成功安装)

private boolean isAppInstalled(String packageName){
    PackageManager pm = context.getPackageManager();
    boolean installed =false;
    try{
        pm.getPackageInfo(uri,PackageManager.GET_ACTIVITIES);
        installed =true;
    }catch(PackageManager.NameNotFoundException e){
        installed =false;
    }
    return installed;
}

android图片压缩上传系列-service篇

本篇文章是继续上篇android图片压缩上传系列-基础篇文章的续篇。主要目的是:通过Service来执行图片压缩任务来讨论如何使用Service,如何处理任务量大的并发问题。了解下Service大家都...

Android四大组件之Service

什么是Service Service是一个应用组件, 它用来在后台完成一个时间跨度比较大的工作且没有关联任何界面 一个Service可以完成下面这些工作: 访问网络 播放音乐 文件IO操作 大数据...

hosts文件无法修改怎么办 保存文档失败,请检查文件是否被另一个应用程序打开了

Hosts文件相信大家电脑爱好者朋友都不会陌生,在屏蔽网页、访问一些特定局域网的时候,都可能需要修改Hosts文件。不过最近有网友这样一个问题:在修改Hosts文件后,法保存的情况,提示“您没有权限在...

如何启动另一个应用程序

  • 2015年01月21日 13:14
  • 4.06MB
  • 下载

android制作sdk,通过SDK调用另一个应用的方法

为了让其他人可以调用我们应用的方法。我们可以通过通过JNI实现跨进程通讯。也可以用java的反射调用其他APP 中的方法。但是你需要知道其他APP得包名,类名,或获取他的JNI文件。 通过制作SDK(...
  • cgt_cgt
  • cgt_cgt
  • 2017年08月01日 19:42
  • 234

android应用开发实践三----Atcity 通过Intent 来启动另一个Activity来实现简易拨号

用到的字符串资源 Myphone Hello world! 请输入号码: Settings 拨打号码 联通热线 充值热线 ...

android学习(五) 向另一个应用发送用户 Intent

构建隐含Intent

Android官方开发文档Training系列课程中文版:构建第一款安卓应用之启动另一个Activity

原文地址:http://android.xsoftlab.net/training/basics/firstapp/starting-activity.html#CreateActivity 在完成...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:关于android 应用中安装另一个应用 打开另一个应用 判断另一个应用是否安装
举报原因:
原因补充:

(最多只允许输入30个字)