android 下载安装并打开apk
2016-04-12 11:01
597 查看
package com.orangewealth.orangeclient.manager; import android.app.ProgressDialog; import android.content.ComponentName; import android.content.Context; import android.content.Intent; import android.content.pm.PackageInfo; import android.graphics.Paint; import android.net.Uri; import android.os.Bundle; import android.os.Environment; import android.widget.Toast; import java.io.BufferedInputStream; import java.io.File; import java.io.FileOutputStream; import java.io.InputStream; import java.net.HttpURLConnection; import java.net.URL; /** * Created by yangyang on 4/11/16. */ public class DownPackageManager { private static final String TAG=DownPackageManager.class.getSimpleName(); private static DownPackageManager instance; private DownPackageManager(){ } private static DownPackageManager getInstance(){ if(instance==null){ instance=new DownPackageManager(); } return instance; } //下载文件 public static File getFileFromSercer(String path,ProgressDialog pd) throws Exception{ if(Environment.getExternalStorageState().equals((Environment.MEDIA_MOUNTED))){ String apkFile = Uri.parse(path).getLastPathSegment()+".apk"; URL url=new URL(path); HttpURLConnection conn=(HttpURLConnection)url.openConnection(); conn.setConnectTimeout(5000); pd.setMax(conn.getContentLength()); InputStream is=conn.getInputStream(); File file=new File(Environment.getExternalStorageDirectory(),apkFile); FileOutputStream fos=new FileOutputStream(file); BufferedInputStream bis=new BufferedInputStream(is); byte[] buffer =new byte[1024]; int len; int total=0; while ((len=bis.read(buffer))!=-1){ fos.write(buffer,0,len); total+=len; // pd.setProgress(total); } fos.close(); bis.close(); is.close(); return file; }else { return null; } } //安装指定文件的包 public static void installApk(Context context, File file){ Intent intent=new Intent(); intent.setAction(Intent.ACTION_VIEW); intent.setDataAndType(Uri.fromFile(file), "application/vnd.android.package-archive"); context.startActivity(intent); } //根据包名判断安装包是否安装 public static boolean isAppInstalled(Context c,String packgename){ PackageInfo packageinfo; try{ packageinfo=c.getPackageManager().getPackageInfo(packgename,0); }catch (Exception e){ packageinfo=null; e.getStackTrace(); } if (packageinfo == null) { //System.out.println("没有安装"); return false; } else { //System.out.println("已经安装"); return true; } } //下载APK public static void downLodeApk(final Context context,final String url){ final ProgressDialog pd; pd=new ProgressDialog(context); pd.setProgressStyle(ProgressDialog.STYLE_HORIZONTAL); pd.setMessage("正在下载应用"); pd.show(); pd.setCanceledOnTouchOutside(false); // 因为新启的线程,所以要是final new Thread(){ @Override public void run(){ try{ File file=getFileFromSercer(url, pd); installApk(context,file); pd.dismiss(); }catch (Exception e){ Toast.makeText(context.getApplicationContext(), "下载新版本失败", Toast.LENGTH_SHORT).show(); } } }.start(); } // 根据下载地址打开APK public static void openApk( Context c,String packagenaem,Bundle bundle,String activity,String url){ if(isAppInstalled(c,packagenaem)){ Intent i=new Intent(); ComponentName cn=new ComponentName(packagenaem,activity); i.setComponent(cn); i.putExtras(bundle); c.startActivity(i); }else {//未安装 downLodeApk(c,url); } } }
相关文章推荐
- 使用C++实现JNI接口需要注意的事项
- Android IPC进程间通讯机制
- Android Manifest 用法
- [转载]Activity中ConfigChanges属性的用法
- Android之获取手机上的图片和视频缩略图thumbnails
- Android之使用Http协议实现文件上传功能
- Android学习笔记(二九):嵌入浏览器
- android string.xml文件中的整型和string型代替
- i-jetty环境搭配与编译
- android之定时器AlarmManager
- android wifi 无线调试
- Android Native 绘图方法
- Android java 与 javascript互访(相互调用)的方法例子
- android 代码实现控件之间的间距
- android FragmentPagerAdapter的“标准”配置
- Android"解决"onTouch和onClick的冲突问题
- android:installLocation简析
- android searchView的关闭事件
- SourceProvider.getJniDirectories