downApk
来源:互联网 发布:尤因和奥拉朱旺的数据 编辑:程序博客网 时间:2024/06/12 21:06
activity_main.xml
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" android:paddingBottom="@dimen/activity_vertical_margin" android:paddingLeft="@dimen/activity_horizontal_margin" android:paddingRight="@dimen/activity_horizontal_margin" android:paddingTop="@dimen/activity_vertical_margin" tools:context="com.example.xiazai.MainActivity" > <Button android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="下载APk" android:onClick="downloadApk"/></RelativeLayout>
MainActivity.java
package com.example.xiazai;import java.io.File;import java.io.FileOutputStream;import java.io.IOException;import java.io.InputStream;import java.net.HttpURLConnection;import java.net.URL;import android.app.Activity;import android.app.ProgressDialog;import android.content.Intent;import android.net.Uri;import android.os.Bundle;import android.os.Environment;import android.view.View;public class MainActivity extends Activity {private String apkUri = "http://192.168.30.41:8080/android/Storage.apk";// 下载进度条目private ProgressDialog pd;//下载安装的目录地址private File apkFile;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);// 加载视图文件setContentView(R.layout.activity_main);}// 为按钮添加单击事件public void downloadApk(View view) {// 显示下载进度条showProgressDialog();// 准备一个保存apk的file对象createApkFile();// 启动分现场下载,下载过程更新进度,下载完成移除并安装startDownApk();}/** * 显示下载进度条目 */private void showProgressDialog() {// 创建一个进度条pd = new ProgressDialog(this);// 设置进度条的样式pd.setProgressStyle(ProgressDialog.STYLE_HORIZONTAL);// 点击其他位置进度条不会消失pd.setCancelable(false);// 显示出来pd.show();}/** * 如果sd可以用,保存在sd卡---> storage/sdcard/Andriod/data/包名/ * 如果不可用保存在手机内部files---> data/data/包名/files/ */private void createApkFile() {File fileDir = null;//判断sd卡是否处于挂载的状态if (Environment.MEDIA_MOUNTED.equals(Environment.getExternalStorageState())) {fileDir = getExternalFilesDir(null);} else {fileDir = getFilesDir();}//创建好文件夹的地址信息apkFile = new File(fileDir, "test1.apk");try {if (apkFile.exists()) {apkFile.delete();}else {//正式创建一个文件夹apkFile.createNewFile();}} catch (IOException e) {e.printStackTrace();}}/** * 下载apk */private void startDownApk() {new Thread(new Runnable() {@Overridepublic void run() {try {//创建url对象URL url = new URL(apkUri);// 打开连接HttpURLConnection conn = (HttpURLConnection) url.openConnection();// 设置时间--get请求conn.setRequestMethod("GET");conn.setDoInput(true);//conn.setDoOutput(true); 这个注释掉,打开就是post请求conn.setReadTimeout(5000);conn.setConnectTimeout(5000);// 连接conn.connect();// 判断相应码if (conn.getResponseCode() == 200) {// 读取数据InputStream is = conn.getInputStream();// 得到文件的大小int contentLength = conn.getContentLength();// 设置进度条的最大值pd.setMax(contentLength);// 读到文件里FileOutputStream fos = new FileOutputStream(apkFile);byte[] buffer = new byte[5000];int len = 0;while ((len = is.read(buffer))!=-1) {fos.write(buffer, 0, len);pd.incrementProgressBy(len);Thread.sleep(200);}fos.close();is.close();// 出循环写完了pd.dismiss();// 启动一个activityinstallAPK();}} catch (Exception e) {e.printStackTrace();}}}).start();}/** * 安装APK */public void installAPK() {Intent intent = new Intent();//创建一个带行为的intent对象intent.setAction(Intent.ACTION_VIEW);intent.setDataAndType(Uri.fromFile(apkFile),"application/vnd.android.package-archive");//启动窗口界面startActivity(intent);}}
0 0
- downApk
- Android downapk
- AngularJS 控件无效或不显示的问题
- J2EE学习推荐书籍
- -fno-objc-arc的编译标记
- EventEmitter(事件监听/发射器 )
- Java学习之多线程--创建线程的三种方式
- downApk
- VC++中如何复制对话框资源
- atitit.提升软件开发的生产力关健点-------大型开发工具最关健
- Codeforces Round #295 (Div. 2) D.Cubes(STL SET应用)
- mongodb 使用场景和不使用场景
- shell编程三种循环结构
- Vol2.4.2.push指令
- A PAINLESS GUIDE TO CRC ERROR DETECTION ALGORITHMS
- maven 工程启动找不到 Spring ContextLoaderListener 的解决办法