android APK更新主要代码

本文介绍了如何使用Java实现APK下载与安装的功能,包括地址验证、网络类型选择、通知栏显示、文件路径设定及下载ID获取等步骤,并在下载完成后自动安装APK。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

DownloadManager downloadManager;
/**下载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));

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值