import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.net.HttpURLConnection;
import java.net.MalformedURLException;
import java.net.URL;
import java.security.PublicKey;
import ist.angle.mobile.R;
import android.R.integer;
import android.app.AlertDialog;
import android.content.Context;
import android.content.Intent;
import android.net.Uri;
import android.os.Handler;
import android.os.Message;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.View;
import android.widget.ProgressBar;
import android.widget.TextView;
public class DownLoadDialog extends AlertDialog {
private ProgressBar barDownload;
private TextView textProgress;
private String PROGRESS ;
private double size;
int hasDowned = 0;
private Context context;
private File file ;
private Handler handler = new Handler() {
public void handleMessage(Message msg) {
if (msg.what == 1) {
hasDowned += msg.arg1;
if (hasDowned == size) {
barDownload.setProgress(100);
textProgress.setText("下载已经完成!");
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
e.printStackTrace();
}
openFile();
return ;
}
Log.d("downed", ""+hasDowned);
int intProgress = (int) ((hasDowned / size) * 100);
barDownload.setProgress(intProgress);
textProgress.setText(String.format(PROGRESS, intProgress));
}
}
};
public DownLoadDialog(Context context) {
super(context);
show();
this.context = context;
PROGRESS = context.getString(R.string.down_progress);
View viewDown = LayoutInflater.from(context).inflate(
R.layout.download_dialog, null);
barDownload = (ProgressBar) viewDown.findViewById(R.id.bar_download);
barDownload.setPressed(true);
barDownload.setMax(100);
textProgress = (TextView) viewDown.findViewById(R.id.text_progress);
textProgress.setText(String.format(PROGRESS, 0));
setContentView(viewDown);
new Thread(new Runnable() {
public void run() {
HttpURLConnection connection = null;
URL url;
InputStream inputStream = null;
FileOutputStream outputStream = null;
try {
url = new URL(
"http://dl.91rb.com/a5495acfb55f94ce25ac3bcd4de49c55/android/soft/2011/11/2/d537810d27024249b7e6b41a8a413b17/com.diandian-11.apk");
connection = (HttpURLConnection) url.openConnection();
connection.setConnectTimeout(5000);
connection.setDoInput(true);// 允许输入
connection.setDoOutput(true);// 允许输出
connection.setUseCaches(false); // 不允许使用缓存
connection.setRequestMethod("GET");
connection.setRequestProperty("User-Agent", "Mozilla/5.0 (Windows NT 5.1) AppleWebKit/535.11 (KHTML, like Gecko) Chrome/17.0.963.79 Safari/535.11");
connection.setRequestProperty("Accept", "text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8");
connection.connect();
inputStream = connection.getInputStream();
file = new File("/sdcard/mobile_uwenke.apk");
outputStream = new FileOutputStream(file);
// 文件大小
size = connection.getContentLength();
byte[] buff = new byte[2048];
int length = 0;
while ((length = inputStream.read(buff)) != -1) {
outputStream.write(buff,0,length);
Message msg = new Message();
msg.arg1 = length;
msg.what = 1;
handler.sendMessage(msg);
}
} catch (MalformedURLException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
} finally {
try {
connection.disconnect();
if (inputStream != null)
inputStream.close();
if (outputStream != null)
outputStream.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
}).start();
}
private void openFile() {
Intent intent = new Intent();
intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
intent.setAction(android.content.Intent.ACTION_VIEW);
intent.setDataAndType(Uri.fromFile(file),
"application/vnd.android.package-archive");
context.startActivity(intent);
}
}
分享到:
相关推荐
在Android应用开发中,适配不同的系统版本是一项重要的任务,特别是在自动更新APK的过程中。本文将深入探讨如何解决Android10以下及以上的系统版本中,下载更新的APK自动安装失败的问题,为开发者提供实用的解决方案...
unity 内部更新Apk 自动安装 支持安卓8.0 以上 demo.apk 测试包
- 服务端提供版本信息和apk下载地址 - 客户端通过对比版本进行文件下载安装升级 # 客户端 ## 权限清单(AndroidManifest.xml) ```xml <manifest xmlns:android="http://schemas.android.com/apk/res/android" ...
unity版本2021.3.26f
在Android开发中,实现应用的自动更新功能是提高用户体验、保证软件安全性和稳定性的关键步骤。这个"Android自动更新的demo"就是一个展示如何在Android应用中实现自动检查和下载更新的示例。以下是对这个主题的详细...
本文将深入探讨“android-APK自动更新.rar”这一资源中涉及的关键技术点,包括如何在Android 10.0和9.0系统上实现APK的自动更新,以及自动获取权限的相关策略。 一、Android APK自动更新机制 1. Google Play服务的...
本文将深入探讨如何实现Android应用程序的自动更新机制,特别是在下载APK文件方面。我们将基于名为"DownLoadDemo"的源代码实例进行讨论。 1. **Android权限设置**: 在AndroidManifest.xml文件中,需要添加必要的...
当有更新时,只需要更新服务器上的这些静态资源,用户打开应用即可自动获取最新版本,而不需要重新下载整个apk。 在实现这个功能时,通常会用到以下关键技术和工具: 1. **WebView组件**:Android系统内置的...
在Android平台上,更新、下载、安装以及打开APK文件是应用程序生命周期中的常见操作。下面将详细阐述这些过程及其相关的知识点。 一、Android APK文件 APK(Android Package)是Android系统中应用程序的安装包,...
自己写了一个脚本,代替91手机助手之类的安装,记得把adb目录加入到系统环境变量,脚本放在任何地方都行,apk拖到脚本上面自动安装~~~apk名字不能有中文
标题提到的"用于unity Android 平台做apk自动更新Jar包.zip"正是为了解决这一需求,它包含了一些关键的库文件,帮助开发者在Unity中构建apk的自动更新机制。 首先,我们来详细了解这两个重要的库文件: 1. **...
在Android平台上,自动安装APK是一项常见的操作,尤其对于开发者来说,这有助于快速测试和部署应用。本示例,"Android 自动安装apk",提供了一个DEMO,它允许用户无需手动操作即可安装APK文件。这个过程涉及到...
该脚本支持根据APK自动生成Android.mk和解压缩库,方便APK预制,支持armeabi,armeabi-v7a,arm64-v8a
在Android应用开发中,自动更新功能是至关重要的,它能够帮助开发者及时修复程序中的错误,增加新特性,并确保用户始终使用的是最新版本的应用。"Android 应用软件自动更新源码"是一个示例项目,旨在教授如何在...
以上就是PHP上传apk后自动提取apk包信息的基本流程。这个DEMO可以作为基础,根据实际需求进行扩展,例如处理更多类型的APK信息,或者将这些信息存入数据库、显示在网页上等。注意,为了安全起见,应对上传的文件进行...
**Android APK 自动签名工具详解** 在Android应用开发过程中,APK文件是应用程序的最终打包形式,用户在设备上安装的应用都是APK文件。在发布APK之前,我们需要对其进行签名,以确保应用的安全性和完整性。本文将...
云集自动.apk
2. **ADB命令行**:通过USB连接设备,使用ADB工具,可以执行`adb install -r -g <apk_path>`命令,其中`-r`表示更新已存在的应用,`-g`表示授予所有权限。 ### 自动重新启动 当APK安装完成后,有时需要应用自动启动...
在Android平台上,实现从网络下载APK文件并自动执行安装是一个常见的需求,尤其在更新应用或者分发非市场应用时。这个过程涉及到多个步骤,包括网络请求、文件下载、权限处理以及安全检查。下面我们将详细讲解如何...
本项目聚焦于如何利用C#来实现自动打包APK的过程,这对于开发者来说是一项非常实用的技术,能够提高工作效率,特别是对于需要频繁发布或更新应用的团队。 首先,我们需要了解C#如何与Android开发进行交互。这通常...