You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何设置可通过普通链接/Google Drive链接下载APK的下载按钮?

Android 设置APK下载按钮(普通链接/Google Drive链接)

一、通过普通直接APK链接实现下载按钮

1. 布局文件(activity_version.xml)

添加下载按钮:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:gravity="center"
    android:orientation="vertical">

    <Button
        android:id="@+id/btn_download_apk"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="下载APK" />

</LinearLayout>

2. 代码实现(VersionActivity.java)

使用系统DownloadManager服务处理下载,支持断点续传、系统通知栏进度显示:

package com.example.project;

import android.app.DownloadManager;
import android.content.Context;
import android.net.Uri;
import android.os.Bundle;
import android.os.Environment;
import android.view.View;
import android.widget.Button;

import androidx.appcompat.app.AppCompatActivity;

public class VersionActivity extends AppCompatActivity {

    private Button btnDownloadApk;
    // 替换为你的APK直接下载链接
    private static final String APK_DOWNLOAD_URL = "https://example.com/your-app.apk";

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_version);

        btnDownloadApk = findViewById(R.id.btn_download_apk);
        btnDownloadApk.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                startApkDownload(APK_DOWNLOAD_URL);
            }
        });
    }

    private void startApkDownload(String downloadUrl) {
        // 创建DownloadManager请求
        DownloadManager.Request request = new DownloadManager.Request(Uri.parse(downloadUrl));
        // 设置通知栏标题和描述
        request.setTitle("应用更新");
        request.setDescription("正在下载最新版本APK");
        // 允许媒体扫描,使下载的文件能被系统识别
        request.allowScanningByMediaScanner();
        // 设置下载完成后显示通知
        request.setNotificationVisibility(DownloadManager.Request.VISIBILITY_VISIBLE_NOTIFY_COMPLETED);
        // 设置保存路径:外部存储的Download目录,文件名自定义
        request.setDestinationInExternalPublicDir(Environment.DIRECTORY_DOWNLOADS, "MyAppUpdate.apk");

        // 获取DownloadManager服务并加入下载队列
        DownloadManager downloadManager = (DownloadManager) getSystemService(Context.DOWNLOAD_SERVICE);
        if (downloadManager != null) {
            downloadManager.enqueue(request);
        }
    }
}

3. 权限声明(AndroidManifest.xml)

在Manifest中添加必要权限:

<uses-permission android:name="android.permission.INTERNET" />
<!-- Android 10及以上无需WRITE_EXTERNAL_STORAGE,maxSdkVersion设为28 -->
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" android:maxSdkVersion="28" />
<!-- 允许安装未知来源应用(Android 8.0+需要) -->
<uses-permission android:name="android.permission.REQUEST_INSTALL_PACKAGES" />

二、通过Google Drive链接实现下载按钮

Google Drive的公开分享链接无法直接用于下载,需要先转换为直接下载链接:

  • 原始分享链接格式:https://drive.google.com/file/d/[FILE_ID]/view?usp=sharing
  • 转换为直接下载链接:https://drive.google.com/uc?export=download&id=[FILE_ID]
    (替换[FILE_ID]为你文件的实际ID,即原始链接中d/和/view之间的字符串)

基础代码实现

只需将普通链接方案中的APK_DOWNLOAD_URL替换为转换后的Google Drive链接即可,核心代码和权限声明完全一致:

// 替换为转换后的Google Drive直接下载链接
private static final String APK_GOOGLE_DRIVE_URL = "https://drive.google.com/uc?export=download&id=你的文件ID";

// 点击事件中调用startApkDownload(APK_GOOGLE_DRIVE_URL)即可

大文件下载处理(超过100MB)

如果文件较大,Google Drive会弹出确认下载页面,直接使用上述链接会下载HTML文件而非APK,需处理重定向获取Cookie后发起下载:

// 处理大文件下载逻辑(需在子线程执行)
private void downloadLargeDriveFile(String fileId) {
    String cookieUrl = "https://drive.google.com/uc?export=download&id=" + fileId;
    OkHttpClient client = new OkHttpClient();
    Request cookieRequest = new Request.Builder().url(cookieUrl).build();
    
    client.newCall(cookieRequest).enqueue(new Callback() {
        @Override
        public void onFailure(Call call, IOException e) {
            e.printStackTrace();
        }

        @Override
        public void onResponse(Call call, Response response) throws IOException {
            String cookie = response.header("Set-Cookie");
            if (cookie != null) {
                runOnUiThread(() -> {
                    DownloadManager.Request request = new DownloadManager.Request(Uri.parse(cookieUrl + "&confirm=t"));
                    request.addRequestHeader("Cookie", cookie);
                    // 其余设置和普通下载一致
                    request.setTitle("应用更新");
                    request.setDescription("正在下载大文件APK");
                    request.setDestinationInExternalPublicDir(Environment.DIRECTORY_DOWNLOADS, "MyAppUpdate.apk");
                    
                    DownloadManager downloadManager = (DownloadManager) getSystemService(Context.DOWNLOAD_SERVICE);
                    if (downloadManager != null) {
                        downloadManager.enqueue(request);
                    }
                });
            }
        }
    });
}

(注:使用OkHttpClient需在build.gradle中添加依赖:implementation 'com.squareup.okhttp3:okhttp:4.10.0')


内容的提问来源于stack exchange,提问作者user19521700

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.26 06:27:29