`
zhtch_123
  • 浏览: 84664 次
  • 性别: Icon_minigender_1
  • 来自: 西安
社区版块
存档分类
最新评论

适用于android1.5以下版本apk静默安装

 
阅读更多

上代码:

package com.forelid.ispa.support.utils;


import java.io.File;  

import java.io.FileNotFoundException;  

import java.io.FileOutputStream;  

import java.io.IOException;  

import android.content.Context;  

import android.content.Intent;  

import android.content.pm.PackageInfo;  

import android.content.pm.PackageManager;  

import android.content.pm.PackageManager.NameNotFoundException;  

import android.content.pm.ApplicationInfo;

import android.content.pm.PackageParser;

import android.net.Uri;  

import android.util.Log;  

import android.util.DisplayMetrics;

import android.content.pm.IPackageInstallObserver;  

import android.content.pm.IPackageDeleteObserver;  

import android.os.FileUtils;  

import android.os.Handler;

import android.os.Message;

 

public class PackageInstaller {  

	private File mTmpFile;

	private final int INSTALL_COMPLETE = 1;

	final static int SUCCEEDED = 1;

	final static int FAILED = 0;

	private final static String TAG = "PackInstaller";

	private Context mContext;

	private ApplicationInfo mAppInfo;

	public PackageInstaller(Context context) {

		mContext = context;

	}

	public void install(String path, String packageName) {

		Intent intent = new Intent(Intent.ACTION_VIEW);

		intent.setDataAndType(Uri.fromFile(new File(path)),

		"application/vnd.android.package-archive");

		mContext.startActivity(intent);

	} 

 

	public void instatllBatch(String path) {

		Log.i(TAG, "path=" + path);

		int installFlags = 0;

		Uri mPackageURI = Uri.fromFile(new File(path));

		PackageParser.Package mPkgInfo = getPackageInfo(mPackageURI);

		mAppInfo = mPkgInfo.applicationInfo;

		String packageName = mAppInfo.packageName;

		Log.i(TAG, "====install packageName =" + packageName);

		PackageManager pm = mContext.getPackageManager();

		try {

			PackageInfo pi = pm.getPackageInfo(packageName,

			PackageManager.GET_UNINSTALLED_PACKAGES);

			if (pi != null) {

				installFlags |= PackageManager.INSTALL_REPLACE_EXISTING;

			}

		} catch (NameNotFoundException e) {

		}

		if ((installFlags & PackageManager.INSTALL_REPLACE_EXISTING) != 0) {

			Log.w(TAG, "Replacing package:" + packageName);

		}

 

		PackageInstallObserver observer = new PackageInstallObserver();

		pm.installPackage(mPackageURI, observer, installFlags,

		packageName);

	}

	private class PackageInstallObserver extends IPackageInstallObserver.Stub {

		public void packageInstalled(String packageName, int returnCode) {

			// Message msg = mHandler.obtainMessage(INSTALL_COMPLETE);

			// msg.arg1 = returnCode;

			// mHandler.sendMessage(msg);

			Log.i(TAG, "====INSTALL_COMPLETE");

		}

	}

	private class PackageDeleteObserver extends IPackageDeleteObserver.Stub {

		public void packageDeleted(boolean succeeded) {

			// Message msg = mHandler.obtainMessage(UNINSTALL_COMPLETE);

			// msg.arg1 = succeeded?SUCCEEDED:FAILED;

			// mHandler.sendMessage(msg);

			Log.i(TAG, "====UNINSTALL_COMPLETE");

		}

	} 

	public void uninstall(String packageName) {

		Uri packageURI = Uri.parse("package:" + packageName);

		Intent uninstallIntent = new Intent(Intent.ACTION_DELETE,

		packageURI);

		mContext.startActivity(uninstallIntent);

	} 

 

	public void uninstallBatch(String packageName) {

		PackageDeleteObserver observer = new PackageDeleteObserver();

		mContext.getPackageManager().deletePackage(packageName, observer, 0);

	} 

/*  

*  Utility method to get package information for a given packageURI           

*/

public  PackageParser.Package getPackageInfo(Uri packageURI) {

		final String archiveFilePath = packageURI.getPath();

		PackageParser packageParser = new PackageParser(archiveFilePath);

		File sourceFile = new File(archiveFilePath);

		DisplayMetrics metrics = new DisplayMetrics();

		metrics.setToDefaults();

		PackageParser.Package pkg = packageParser.parsePackage(sourceFile,

		archiveFilePath, metrics, 0);

		// Nuke the parser reference.

		packageParser = null;

		return pkg;

}

/*

* Utility method to get application information for a given packageURI

*/

public   ApplicationInfo getApplicationInfo(Uri packageURI) {

		final String archiveFilePath = packageURI.getPath();

		PackageParser packageParser = new PackageParser(archiveFilePath);

		File sourceFile = new File(archiveFilePath);

		DisplayMetrics metrics = new DisplayMetrics();

		metrics.setToDefaults();

		PackageParser.Package pkg = packageParser.parsePackage(sourceFile,
				archiveFilePath, metrics, 0);

		if (pkg == null) {

			return null;

		}

		return pkg.applicationInfo;

}

private Handler mHandler = new Handler() {

		public void handleMessage(Message msg) {

			switch (msg.what) {

			case INSTALL_COMPLETE:

				if (msg.arg1 == SUCCEEDED) {

				} else {
				}

				break;

			default:

				break;

			}

		}

	};

}

 

分享到:
评论

相关推荐

    Android 无需root实现APK静默安装

    使用Android5.0的环境编译的,不同版本之间,aidl文件可能会有差异,具体还需参照Android...详细参考我的博客文章《Android 无需root实现APK静默安装》:http://blog.csdn.net/yyh352091626/article/details/50533137

    Android应用源码APK实现静默安装整套资料

    不仅可以安装新的apk,也适用于更新旧的apk。更新apk必须保证新旧apk签名一致。本次分享的源码就是一套关于apk静默安装的源码,可以实现apk的静默安装或更新。压缩包里有两种实现apk静默安装的方法说明和详细的操作...

    Android无需root实现apk的静默安装

    Android的静默安装似乎是一个很有趣很诱人的东西,但是,用普通做法,如果手机没有root权限的话,似乎很难实现静默安装,因为Android并不提供显示的Intent调用,一般是通过以下方式安装apk: Intent intent = new ...

    APK自动静默安装并自动重新启动

    在Android系统中,APK自动静默安装并自动重新启动是一项技术操作,通常涉及到系统级权限和特定的脚本编写。这项技术常用于批量设备管理、应用自动化测试或企业内部应用部署等场景。以下是关于这个主题的详细知识讲解...

    Android应用源码APK实现静默安装整套资料.zip

    本资料"Android应用源码APK实现静默安装整套资料.zip"提供了一种实现静默安装的方法,包括源码参考和相关指导。下面我们将详细探讨如何在Android系统中实现APK的静默安装。 首先,我们需要了解在Android系统中安装...

    Android10静默安装APK

    在Android系统中,静默安装APK(Silent Install)是指在用户无感知的情况下自动安装应用程序。这通常需要系统的特殊权限,因为出于安全考虑,Android系统默认不允许非系统应用进行后台安装。在Android 10中,由于...

    apk静默安装apk

    总结起来,"apk静默安装apk"是一种通过编程方式在Android设备上自动化安装APK的方法,主要应用于批量部署和测试环境。该过程涉及到读取`assets`目录中的APK,创建并使用`ParcelFileDescriptor`,以及调用`Package...

    Android apk后台静默安装

    在Android系统中,APK...以上就是关于"Android apk后台静默安装"的相关知识点,包括其原理、适用版本、实现步骤以及需要注意的安全问题。在实际操作时,务必确保符合Android系统的安全策略和用户隐私保护规定。

    android静默安装程序

    在Android系统中,静默安装(Silent Installation)是指在用户无感知的情况下,通过编程方式自动安装应用程序。这种操作通常需要设备具有root权限,因为正常的Android安全机制限制了非系统应用的静默安装。Root权限...

    android apk静默安装方法

    以下是实现Android APK静默安装的方法: 首先,要进行静默安装,你需要拥有设备的管理员权限。这是因为从Android 4.4(KitKat)版本开始,系统对应用程序的安装进行了限制,非系统应用无法在后台静默安装其他应用,...

    静默安装apk android4.4

    在Android系统中,静默安装(Silent Install)是指在用户无感知的情况下自动安装APK应用的过程。在Android 4.4(KitKat)版本中,这个功能主要应用于企业级设备管理和批量部署应用的场景。下面我们将详细探讨如何在...

    Android10.0 静默安装、卸载接口.zip

    1. 由于权限限制,普通应用在Android 10及更高版本上进行静默安装可能需要用户手动授权,或者通过系统级别的服务来实现。 2. 在进行静默操作时,必须确保有正确的权限,并且处理好可能出现的异常,例如权限被拒绝、...

    android 7.0非root下 实现静默安装 多种方式

    在Android 7.0(Nougat)版本中,虽然默认对非root用户的静默安装进行了限制,但仍然有一些方法可以实现这一目标。本文将详细介绍在具有system权限的非root环境下,实现静默安装和静默卸载的多种方式。 1. ADB...

    Android静默安装卸载APK

    在Android系统中,静默安装和卸载APK是指在用户无感知的情况下,通过编程方式自动执行安装或卸载应用程序的过程。这种方式常用于系统维护、自动化测试或者在企业级设备管理中,以便批量处理应用程序的部署。在本教程...

    Android无需Root静默安装apk

    总结来说,静默安装APK在Android中可以通过Adb命令行或自定义服务实现,其中Adb方法适用于快速测试,而自定义服务更适合集成到自动化流程中。不过,无论哪种方法,都需要注意安全性和权限问题,因为静默安装可能会被...

    android 5.1静默安装、卸载patch

    支持android5.1静默安装、卸载代码,封装在PackageInstaller模块内,在执行时可能需要修改部分framework代码使功能正常使用。

    android定时静默安装apk

    静默安装APK适用于自动化部署、批量更新应用等场景。本教程将详细介绍如何实现Android定时静默安装APK,并在安装完成后自动启动。 一、获取root权限 在Android设备上进行静默安装前,首先要确保设备已获得root权限...

    APK 静默安装

    APK静默安装是Android系统中一种特殊的应用程序安装方式,它无需用户交互,通过后台命令或脚本即可完成安装过程。这种方式常用于系统更新、自动化测试或者企业级应用部署等场景,尤其对于批量安装大量应用程序时能...

Global site tag (gtag.js) - Google Analytics