其实很简单,只需要几行代码就好了,首先要到服务器下载apk,然后才能安装,当然不是傻子应该都知道,我这里用到的是Httputils去下载,

这里需要一些权限

<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.MOUNT_UNMOUNT_FILESYSTEMS" />
<uses-permission android:name="android.permission.INSTALL_PACKAGES"/>

  

直接贴代码

package com.exmple.httpxutil;

import java.io.File;

import android.annotation.SuppressLint;
import android.app.Activity;
import android.content.Intent;
import android.content.pm.PackageInfo;
import android.content.pm.PackageManager;
import android.content.pm.PackageManager.NameNotFoundException;
import android.content.pm.Signature;
import android.net.Uri;
import android.os.Bundle;
import android.os.Environment;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.ProgressBar; import com.lidroid.xutils.HttpUtils;
import com.lidroid.xutils.exception.HttpException;
import com.lidroid.xutils.http.HttpHandler;
import com.lidroid.xutils.http.ResponseInfo;
import com.lidroid.xutils.http.callback.RequestCallBack; public class MainActivity extends Activity {
HttpHandler<File> h;
private ProgressBar pa; @SuppressLint("SdCardPath")
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Button button = (Button) findViewById(R.id.button);
pa = (ProgressBar) findViewById(R.id.pro);
Button more = (Button) findViewById(R.id.more);
getCode();
more.setOnClickListener(new OnClickListener() { @Override
public void onClick(View v) {
Intent ints = new Intent(MainActivity.this, NewActivity.class);
startActivity(ints); }
});
button.setOnClickListener(new OnClickListener() { @Override
public void onClick(View v) { HttpUtils http = new HttpUtils();
final String path = Environment.getExternalStorageDirectory()
.getPath();
System.out.println(path); h = http.download(
"http://101.200.142.201:8080/tqyb/baidumap.apk", path
+ "/badumap.apk", true, true,
new RequestCallBack<File>() {
@Override
public void onStart() {
System.out.println("===");
System.out.println("开始下载了++++++++++++++");
} @Override
public void onLoading(long total, long current,
boolean isUploading) {
System.out.println(total + "=====");
System.out.println(current + "=====");
System.out.println(isUploading + "=====");
pa.setMax((int) total);
pa.setProgress((int) current);
} @Override
public void onFailure(HttpException error,
String msg) {
System.out.println(error + "+++++++" + msg
+ "+++++++++"); } @Override
public void onSuccess(
ResponseInfo<File> responseInfo) {
h.cancel();
installApk(path + "/badumap.apk"); } }); }
}); }
//安装的方法
private void installApk(String filename) {
File file = new File(filename);
Intent intent = new Intent();
intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
intent.setAction(Intent.ACTION_VIEW);
String type = "application/vnd.android.package-archive";
intent.setDataAndType(Uri.fromFile(file), type);
startActivity(intent); }
//等到版本号的代码
private void getCode() { PackageManager manager; PackageInfo info = null; manager = this.getPackageManager(); try { info = manager.getPackageInfo(this.getPackageName(), 0);
String name = info.versionName;
int versionCode = info.versionCode;
String packageName = info.packageName;
Signature[] signatures = info.signatures;
System.out.println(name + "++++++++++" + versionCode + "+++++"
+ packageName + "========nnn" + signatures
+ "=============");
/*
* info.versionName;
*
* info.packageName;
*
* info.signatures;
*/ } catch (NameNotFoundException e) { // TODO Auto-generated catch block e.printStackTrace(); } } }

  

下载app后自动安装程序的更多相关文章

  1. Android实例-IdHTTP下载(并实现自动安装)(XE10+小米2)

    相关资料: 1.群号 383675978 2.运行时提示"connection closed gracefully"错误原因与解决 http://www.delphifans.co ...

  2. Android开发必有功能,更新版本提示,检测是否有新版本更新。下载完成后进行安装。

    作者:程序员小冰,CSDN博客:http://blog.csdn.net/qq_21376985,转载请说明出处. 给大家介绍个东西,MarkDown真的超级超级好用.哈哈.好了, 正题内容如下: 先 ...

  3. Android--用DownLoadManager下载完成后启动安装

    当我们用系统的服务DownLoadManager下载完成后,系统会发送一个广播,我们只需要注册一个广播,然后在广播里面写如一些相应的操作. 1.注册广播 completeReceiver = new ...

  4. 如何实现Outlook 2010 下载邮件后自动删除服务器上的邮件

    outlook2010---文件---信息---账户设置---选中要设置的帐号---双击点选要设置的邮箱---其他设置---高级---在服务器上保留邮件的副本---14天后删除服务器上的邮件副本,修改 ...

  5. c#中如何退出程序后自动重新启动程序

    //触发退出程序事件 private void button1_Click(object sender, EventArgs e)        {             Application.E ...

  6. 使用Inno Setup 打包.NET程序,并自动安装.Net Framework

    使用Inno Setup 打包.NET程序,并自动安装.Net Framework http://www.cnblogs.com/xiaogangqq123/archive/2012/03/19/24 ...

  7. Android(2)—Mono For Android App版本自动更新

    0.前言 公司Android查询的项目已经开始,整体采用Java后台+App前台来实现,由于项目小,App这块就我一个人开发,首先需要研究的是:Android版本的更新升级问题:本人经过近一周的学习整 ...

  8. 一个完整的Installshield安装程序实例-转

    一个完整的Installshield安装程序实例—艾泽拉斯之海洋女神出品(一)---基本设置一 前言 Installshield可以说是最好的做安装程序的商业软件之一,不过因为功能的太过于强大,以至于 ...

  9. sencha touch 扩展篇之将sencha touch打包成安装程序(下)- 使用phonegap打包安装程序

        这讲我们来讲解下如何使用phonegapa创建项目环境并通过她们将sencha touch打包成app,这里我们只讲解打包android的apk,打包ios的过程有点类似,但是需要在mac环境 ...

随机推荐

  1. Spring 异常:Error creating bean with name

    异常信息:org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'xxx' 我今 ...

  2. 那些年一起用过的iOS开发利器之Code Pilot

    本系列所有工具的简介见:http://www.cnblogs.com/lloydsheng/p/3637606.html 什么是Code Pilot? Code Pilot是一个Xcode的扩充套件, ...

  3. Oracle EBS Setup

    1. Prevent close other forms after close original form

  4. 安卓中級教程(5):ScrollView與refreshable之間的設置

    設置向下拉動更新. package com.mycompany.Scroll_test; import android.app.*; import android.os.*; import andro ...

  5. reg

    <div class="login-module"> <div class="wide c login"> <form id=&q ...

  6. ajax下载多文件,并且打包 C#中 ,文件批下载zip

    //提交要下载的文件 $.ajax({ url:"/sub/ZipFile.aspx", data:"paras="+datas, type: 'HEAD', ...

  7. MyBatis学习总结(五)——实现关联表查询(转载)

    本文转载自:http://www.cnblogs.com/jpf-java/p/6013516.html 一.一对一关联 1.1.提出需求 根据班级id查询班级信息(带老师的信息) 1.2.创建表和数 ...

  8. C#.Net下的防抖-Debounce和节流阀-Throttle功能实现

    C#下的防抖-Debounce.节流阀-Throttle功能实现 防抖-Debounce 连续的多次调用,只有在调用停止之后的一段时间内不再调用,然后才执行一次处理过程. 节流阀-Throttle 连 ...

  9. 小技巧,关于OC打印指针地址和arc下的retaincount

    CFGetRetainCount((__bridge CFTypeRef)self  : 打印retainCount 打印指针的地址(不是指针指向对象的地址):NSLog(@"aStr指针内 ...

  10. Map与Tuple

    一:Map 1.创建一个不可变的map 2.创建一个可变的map 3.创建一个空的map 4.可变map添加一个元素 5.查看一个元素和修改一个元素 6.可变map删除元素 7.不可变map添加一个元 ...