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程序设计有所帮助。

(0)

相关推荐

  • Android编程之软件的安装和卸载方法

    本文实例讲述了Android编程之软件的安装和卸载方法.分享给大家供大家参考,具体如下: 安装:从sdcard String fileName = Environment.getExternalStorageDirectory() + "/myApp.apk"; Intent intent = new Intent(Intent.ACTION_VIEW); intent.setDataAndType(Uri.parse("file://" + filePath),&

  • 在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监听安装和卸载示例

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

  • 使用python编写批量卸载手机中安装的android应用脚本

    该脚本的功能是卸载android手机中安装的所有第三方应用,主要是使用adb shell pm.adb uninstall 命令,所以使用的前提是需要配好adb的环境变量,下面上代码: #!/usr/bin/env python import os def uninstall(): os.popen("adb wait-for-device") print "start uninstall..." for packages in os.popen("adb

  • Android 静默方式实现批量安装卸载应用程序的深入分析

    前段时间做了一个批量安装卸载应用程序的小应用,由于安装卸载应用程序的部分API是隐藏的,所以必须在ubuntu下下载Android系统源码,并编译之后使用MM命令编译生成APK文件,其实也难. 思路是这样的,在XX/packages/apps目录下有一个PackageInstaller的应用程序,Android机器中安装卸载都是由这个应用程序完成的.但是它没有批量安装和卸载的功能,如果要在自己的应用程序中添加批量安装和卸载的功能,其实很简单,只需要参考PakcageInstaller里面的安装卸

  • Android编程实现监控apk安装,卸载,替换的方法

    本文实例讲述了Android编程实现监控apk安装,卸载,替换的方法.分享给大家供大家参考,具体如下: public class GetBroadcast extends BroadcastReceiver { private static GetBroadcast mReceiver = new GetBroadcast(); private static IntentFilter mIntentFilter; public static void registerReceiver(Conte

  • Android实现用代码简单安装和卸载APK的方法

    本文实例讲述了Android实现用代码简单安装和卸载APK的方法.分享给大家供大家参考,具体如下: public class TestInstallAPK extends Activity { @Override protected void onCreate(Bundle savedInstanceState) { // TODO Auto-generated method stub super.onCreate(savedInstanceState); // this.unInstallFi

  • Android 静默安装和卸载的方法

    本文介绍了Android 静默安装和卸载的方法,分享给大家,具体如下: 一. 条件 系统签名 需要放到 /system/app里作为系统app 二. 适用环境 机顶盒开发,系统开发,车机开发,智能设备开发. 三. 步骤 1. 在 AndroidManifest.xml 中 1.1. 在清单文件 AndroidManifest.xml 添加 android.uid.system 声明为系统应用. 1.2. 权限 <uses-permission android:name="android.p

  • Android 监听apk安装替换卸载广播的实现代码

    首先是要获取应用的安装状态,通过广播的形式以下是和应用程序相关的Broadcast ActionACTION_PACKAGE_ADDED 一个新应用包已经安装在设备上,数据包括包名(最新安装的包程序不能接收到这个广播)ACTION_PACKAGE_REPLACED 一个新版本的应用安装到设备,替换之前已经存在的版本ACTION_PACKAGE_CHANGED 一个已存在的应用程序包已经改变,包括包名ACTION_PACKAGE_REMOVED 一个已存在的应用程序包已经从设备上移除,包括包名(正

  • Android编程监听APK安装与删除等过程的方法

    本文实例讲述了Android编程监听APK安装与删除等过程的方法.分享给大家供大家参考,具体如下: 软件下载后的一系列动作监听:先前是通过Service监听扫描获取状态,以后用这个方法测试使用 import android.content.BroadcastReceiver; import android.content.Context; import android.content.Intent; import android.widget.Toast; public class getBro

随机推荐