android实现静默安装与卸载的方法

本文实例讲述了android实现静默安装与卸载的方法。分享给大家供大家参考。具体如下:

方法1:【使用调用接口方法,由于安装卸载应用程序的部分API是隐藏的,所以必须下载Android系统源码,在源码下开发并编译之后使用MM命令编译生成APK文件】

import java.io.File; import android.app.Activity; import android.os.Bundle; import android.content.Intent; import android.content.pm.PackageInfo; import android.content.pm.PackageManager; import android.content.pm.PackageManager.NameNotFoundException; import android.content.pm.IPackageInstallObserver; import android.content.pm.IPackageDeleteObserver; import android.content.res.Resources; import android.graphics.drawable.Drawable; import android.net.Uri; import android.os.Environment; import android.os.Handler; import android.os.Message; import android.util.Log; import android.view.View; import android.view.View.OnClickListener; import android.widget.Button; import android.widget.ProgressBar; import android.widget.TextView; import android.widget.Toast; public class InstallActivity extends Activity { /** Called when the activity is first created. */ private String APK_NAME = "QQHD-mini.apk"; private Button install = null; private Button uninstall = null; private final int INSTALL_COMPLETE = 1; private final int UNINSTALL_COMPLETE = 2; final static int SUCCEEDED = 1; final static int FAILED = 0; public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.install_uninstall); install = (Button) findViewById(R.id.install); uninstall = (Button) findViewById(R.id.uninstall); uninstall.setOnClickListener(listener1); install.setOnClickListener(listener2); } private OnClickListener listener2=new OnClickListener(){ public void onClick(View v) { String fileName = Environment.getExternalStorageDirectory() + "/" + APK_NAME; Uri uri = Uri.fromFile(new File(fileName)); int installFlags = 0; PackageManager pm = getPackageManager(); try { PackageInfo pi = pm.getPackageInfo("com.tencent.minihd.qq", PackageManager.GET_UNINSTALLED_PACKAGES); if(pi != null) { installFlags |= PackageManager.INSTALL_REPLACE_EXISTING; } } catch (NameNotFoundException e) {} PackageInstallObserver observer = new PackageInstallObserver(); pm.installPackage(uri, observer, installFlags, "com.tencent.minihd.qq"); } }; class PackageInstallObserver extends IPackageInstallObserver.Stub { public void packageInstalled(String packageName, int returnCode) { Message msg = mHandler.obtainMessage(INSTALL_COMPLETE); msg.arg1 = returnCode; mHandler.sendMessage(msg); } }; private Handler mHandler = new Handler() { public void handleMessage(Message msg) { switch (msg.what) { case INSTALL_COMPLETE: int centerTextLabel; Drawable centerTextDrawable = null; if(msg.arg1 == SUCCEEDED) { Toast.makeText(getApplicationContext(), "install apk SUCCEEDED", Toast.LENGTH_SHORT).show(); } else {} if (centerTextDrawable != null) {} break; case UNINSTALL_COMPLETE: int centerTextLabel2; Drawable centerTextDrawable2 = null; if(msg.arg1 == SUCCEEDED) { Toast.makeText(getApplicationContext(), "uninstall apk SUCCEEDED", Toast.LENGTH_SHORT).show(); } else {} if (centerTextDrawable2 != null) {} break; default: break; } } }; private OnClickListener listener1=new OnClickListener(){ public void onClick(View v) { PackageManager pm = getPackageManager(); PackageDeleteObserver observer = new PackageDeleteObserver(); pm.deletePackage("com.tencent.minihd.qq", observer, 0); } }; private class PackageDeleteObserver extends IPackageDeleteObserver.Stub { public void packageDeleted(String packageName, int returnCode) { Message msg = mHandler.obtainMessage(UNINSTALL_COMPLETE); msg.arg1 = returnCode; mHandler.sendMessage(msg); } } }

安装、卸载相关权限:

<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/> <uses-permission android:name="android.permission.INSTALL_PACKAGES" /> <uses-permission android:name="android.permission.DELETE_PACKAGES" /> <uses-permission android:name="android.permission.CLEAR_APP_CACHE" /> <uses-permission android:name="android.permission.READ_PHONE_STATE"/> <uses-permission android:name="android.permission.CLEAR_APP_USER_DATA" />

方法2:【需要获取root权限或者和rom拥有一样的签名,即让该apk以System的身份在系统中运行】

private void test() { execCommand("system/bin/pm install -r " + "sdcard/xxx.apk"); // xxx.apk放置在内置储存的根目录下(mnt/sdcard/xxx.apk) // execCommand("system/bin/pm uninstall " + PACKAGE_NAME); //PACKAGE_NAME为xxx.apk包名 } public boolean execCommand(String cmd) { Process process = null; try { process = Runtime.getRuntime().exec(cmd); process.waitFor(); } catch (Exception e) { return false; } finally { try { process.destroy(); } catch (Exception e) { } } return true; }

其他方法:一些第三方jar包等方式。

希望本文所述对大家的Android程序设计有所帮助。

时间: 2024-10-26 14:50:33

android实现静默安装与卸载的方法的相关文章

android实现静默安装与卸载的方法_Android

本文实例讲述了android实现静默安装与卸载的方法.分享给大家供大家参考.具体如下: 方法1:[使用调用接口方法,由于安装卸载应用程序的部分API是隐藏的,所以必须下载Android系统源码,在源码下开发并编译之后使用MM命令编译生成APK文件] import java.io.File; import android.app.Activity; import android.os.Bundle; import android.content.Intent; import android.con

在Android 模拟器上安装和卸载APK包的方法

模拟器(emulator.exe) 可以在 Android SDK 的安装目录下的 tools 文件夹找到运行文件(F:GPhoneandroid-sdk-windows-1.0_r1 ools),双击运行模拟器. 安装 APK 包 adb install [-l] [-r] - push this package file to the device and install it<'-l' means forward-lock the app><'-r' means reinstall

Android_实现静默安装和卸载应用

转:http://www.cnblogs.com/ondream/archive/2012/04/13/2446138.html    前段时间做了一个批量安装卸载应用程序的小应用,由于安装卸载应用程序的部分API是隐藏的,所以必须在ubuntu下下载Android系统源码,并编译之后使用MM命令编译生成APK文件,其实也难.思路是这样的,在XX/packages/apps目录下有一个PackageInstaller的应用程序,Android机器中安装卸载都是由这个应用程序完成的.但是它没有批量

android监听安装和卸载示例_Android

BroadcastReceiver 是系统全局广播监听类, 其主要方法是onReceive(),自定义的广播类继承于它并实现自己的onReceive()处理逻辑BroadcastReceiver 使用前,需要进行注册监听(xml和代码两种方式),不使用时需要注销监听,其生命周期一般为整个应用的生命周期 1, 自定义广播自定义广播MyInstalledReceiver继承自BroadcastReceiver,实现其onReceive()方式,具体代码如下: 复制代码 代码如下: public cl

android监听安装和卸载示例

BroadcastReceiver 是系统全局广播监听类, 其主要方法是onReceive(),自定义的广播类继承于它并实现自己的onReceive()处理逻辑BroadcastReceiver 使用前,需要进行注册监听(xml和代码两种方式),不使用时需要注销监听,其生命周期一般为整个应用的生命周期 1, 自定义广播自定义广播MyInstalledReceiver继承自BroadcastReceiver,实现其onReceive()方式,具体代码如下: 复制代码 代码如下:public cla

Android 程序的安装、卸载和更新

 安装程序:软件从无到有. 卸载程序:软件从有到无. 更新程序:软件的覆盖安装,可以保留原版本的数据,提升软件版本.   安装程序的方法:   1.  通过Intent机制,调出系统安装应用,重新安装应用的话,会保留原应用的数据.   String fileName = Environment.getExternalStorageDirectory() + apkName; Uri uri = Uri.fromFile(new File(fileName)); Intent intent = n

Oracle 11g数据库安装与卸载的方法图解_oracle

一.Oracle 11g安装 安装之前要先确定自己的电脑配置,以windows为例,如果是win7以下系统如xp等,可以选择Oracle 10g.因为10g的程序文件只有200多兆,而11g及达到了2G,具体文件官方下载路径已经找不到了,只能去一些软件下载平台下载.如果是win7最好采用11g,否则很可能10g出现不兼容安装不成功的情况,本文以win7为例. Oracle 11g官方下载地址如下: http://www.oracle.com/technetwork/database/enterp

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

Android的静默安装似乎是一个很有趣很诱人的东西,但是,用普通做法,如果手机没有root权限的话,似乎很难实现静默安装,因为Android并不提供显示的Intent调用,一般是通过以下方式安装apk: Intent intent = new Intent(Intent.ACTION_VIEW); intent.setDataAndType(Uri.fromFile(file), "application/vnd.android.package-archive"); startAct

android --静默安装

[此篇文章为转载文章] 最近需要实现Android应用的静默安装,在网上看了不少帖子,最后在root权限下实现对应用的静默安装和卸载,现在就整个实现的过程做一个总结. 一.第一种方案第一种方案参考了源码中/packages/apps/PackageInstaller的实现方式,实现的主要代码如下: importjava.io.File; importjava.io.FileNotFoundException; importjava.io.FileOutputStream; importjava.