/**下载APK**/
public void downloadApk(String apkUrl) {
if(apkUrl==null||!(apkUrl.startsWith("http://")||apkUrl.startsWith("https://"))){
toastMsg("下载地址出错了,可尝试到官网下载");
return;
}
Uri uri = Uri.parse(apkUrl);
if(downloadManager==null)
downloadManager = (DownloadManager) getSystemService(Service.DOWNLOAD_SERVICE);
DownloadManager.Request request = new DownloadManager.Request(uri);
// 设置允许使用的网络类型,这里是移动网络和wifi都可以
request.setAllowedNetworkTypes( DownloadManager.Request.NETWORK_MOBILE| DownloadManager.Request.NETWORK_WIFI);
//设置是否允许漫游
request.setAllowedOverRoaming(false);
//设置文件类型
MimeTypeMap mimeTypeMap = MimeTypeMap.getSingleton();
String mimeString = mimeTypeMap.getMimeTypeFromExtension(MimeTypeMap.getFileExtensionFromUrl(apkUrl));
request.setMimeType(mimeString);
//在通知栏中显示
request.setNotificationVisibility( DownloadManager.Request.VISIBILITY_VISIBLE);
request.setTitle(getResources().getText(R.string.app_name)+"下载中...");
request.setVisibleInDownloadsUi(true);
//sdcard目录下的download文件夹
File file=new File(LegworkApplication.mBasePath+"file");
if(!file.exists()){
file.mkdirs();
}
File file2=new File(file, "test.apk");
request.setDestinationUri(Uri.fromFile(file2));
// 将下载请求放入队列
downloadId= downloadManager.enqueue(request);
}
@Override
protected void onDestroy() {
// TODO Auto-generated method stub
super.onDestroy();
unregisterReceiver(downloadCompleteReceiver);
}
private long downloadId;
private BroadcastReceiver downloadCompleteReceiver = new BroadcastReceiver() {
@Override
public void onReceive(Context context, Intent intent) {
long reference = intent.getLongExtra(DownloadManager.EXTRA_DOWNLOAD_ID, -1);
if(downloadId==reference){
/**下载完成后安装APK**/
installApk();
}
}
};
private void installApk() {
Intent i = new Intent(Intent.ACTION_VIEW);
String filePath = getDownloadFileName();
i.setDataAndType(Uri.parse("file://" + filePath), "application/vnd.android.package-archive");
startActivity(i);
}
private String getDownloadFileName(){
DownloadManager.Query query = new DownloadManager.Query();
query.setFilterById(downloadId);
Cursor c = downloadManager.query(query);
if(c.moveToFirst()) {
return c.getString(c.getColumnIndex(DownloadManager.COLUMN_LOCAL_FILENAME));
}
return null;
}
/**注册下载完成广播**/
registerReceiver(downloadCompleteReceiver, new IntentFilter(DownloadManager.ACTION_DOWNLOAD_COMPLETE));