Android SDK 简介

接入指南

接入

通过 gradle 引入

implementation 'com.aliyun.pds:android-sdk:0.1.1'

源码地址 https://github.com/aliyun/aliyun-pds-android-sdk

初始化

使用SDK前您必须已经开通PDS服务,并且在控制台创建了实例,参见快速搭建云盘服务

val token = SDToken("you access token") // 这个通用流程是你们登入自己的账号系统后获取,后端使用 PDS 平台申请的 appKey & appSecret 换取 token 返回给客户端
val apiHost = "you api host"            // 请在PDS控制台获取你的 api host
// val config = SDConfig(token, 3600, apiHost) 旧版本方法,已废弃,不建议使用
val config = SDConfig.Builder(token, apiHost, 3600)
                .canFastUpload()        // 是否支持妙传,默认true (选填)
                .userAgent()            // (选填)
                .maxRetryCount()        // 最大重试次数,默认3  (选填)
                .isDebug()              // 是否开启调试模式,默认false (选填)
                .downloadBlockSize()    // 下载分片大小,默认10M (选填)
                .uploadBlockSize()      // 上传分片大小,默认4M  (选填)
                .connectTimeout()       // 建立网络连接超时时间设置,默认15s (选填)
                .readTimeout()          // 网络连接响应超时时间设置,默认60s (选填)
                .writeTimeout()         // 网络传输响应超时时间设置,默认60s (选填)
                .build()
SDClient.instance.init(this, config)

需要注意的是,当前 SDK 不负责刷新 accessToken。需要使用方从自己的服务器定时刷新token后传递给SDK

SDClient.instance.updateToken(token)

上传下载使用

注意任务的进度和状态回调都在子线程,若要更新UI请自行切换到主线程

下载任务

// 初始化下载信息

val downloadInfo = DownloadRequestInfo.Builder()
    .downloadUrl(url)
    .fileId(fileId)
    .fileName(fileName)
    // 文件保存路径
    .filePath(dir.path)
    .fileSize(fileSize)
    .driveId(driveId)
    // 文件来自分享(不涉及分享业务可不传
    .shareId(shareId)
    .shareToken(shareToken)
    .sharePwd(sharePwd)
    // 历史版本相关(不涉及可不传)
    .revisionId(revisionId)
    // hash 效验值
    .contentHash(hash)
    // hash 效验算法名 当前只支持 crc64
    .contentHashName("crc64")
    .build()

// 创建任务, 
val task = SDClient.instance.createDownloadTask(
    // taskId
    taskId,
    // 下载信息
    downloadInfo,
    // 完成监听(成功,失败都会回调
    completeListener,
    // 下载进度监听
    progressListener,    
)

// 暂停任务,只有运行中的任务可以暂停
task.pause()

// 恢复任务, 只有暂停态的任务可以恢复
task.resume()

// 取消删除任务
task.cancel()

// 重启任务
task.restart()

上传任务

// 初始化上传信息

val uploadInfo = UploadRequestInfo.Builder()
    .fileName("edmDrive")
    .filePath(file.absolutePath)
    .fileSize(file.length())
    .parentId(parentId)
    .driveId(driveId)
    .mimeType(mimeType)
    //上传到的文件夹来自分享(不涉及不填)
    .shareId(shareId)
    .shareToken(shareToken)
    .sharePwd(sharePwd)
    .build()

// 创建任务
val task = SDClient.instance.createUploadTask(
    // 任务id
    taskId,
    // 上传信息
    uploadInfo,
    // 完成监听
    completeListener,
    // 进度监听
    progressListener, 
)

// 暂停任务
task.pause()

// 恢复任务
task.resume()

// 删除取消任务
task.cancel()

创建任务后任务自动启动,可以通过进度回调得知当前任务进度,任务成功或失败则会调用完成监听,

注意任务的进度和状态回调都在子线程若要更新UI请自行切换到主线程

文件API操作

具体请求参数和返回值参考官方 AIP 文档 https://help.aliyun.com/document_detail/440389.html

通过 SDClient.fileApi 拿到 fileApi 对象后调用如下方法访问对应 API

列举文件

fun fileList(fileListRequest: FileListRequest): FileListResp?

// FileListRequest 示例 其他参数参考 FileListRequest 实现
val request = FileListRequest()
request.parentId = "root"               // 所获取文件夹的fileId(root为根目录)
request.driveId = ""                    // 获取列表的用户driveId

创建文件、文件夹

// FileCreateRequest示例
val createRequest = FileCreateRequest()
createRequest.checkNameMode = "auto_rename"     // enum (ignore, auto_rename, refuse)
createRequest.driveId = ""                      // 实施创建操作的用户driveId
createRequest.name = ""                         // 新建文件的名称
createRequest.parentFileId = "root"             // 目标文件夹的fileId(root为根目录)
createRequest.type = "folder"                   // enum (file, folder)

获取文件、文件夹

// 获取文件、文件夹信息
fun fileGet(getResp: FileGetRequest): FileGetResp?

// FileGetRequest 示例
val getRequest = FileGetRequest()
getRequest.driveId = ""                     // 实施查看操作的用户driveId
getRequest.fileId = ""                      // 文件的fileId

拷贝文件、文件夹

// 拷贝文件、文件夹
fun fileCopy(fileCopyRequest: FileCopyRequest): FileCopyResp?

// FileCopyRequest 示例
val copyRequest = FileCopyRequest()
copyRequest.driveId = ""                    // 文件的driveId
copyRequest.fileId = ""                     // 文件的fileId
copyRequest.toDriveId = ""                  // 拷贝目标文件夹的driveId
copyRequest.newName = ""                    // 文件拷贝后的新名字
copyRequest.toParentId = "root"             // 拷贝目标文件夹的fileId(root为根目录)

移动文件、文件夹

// 移动文件、文件夹
fun fileMove(fileMoveRequest: FileMoveRequest): FileMoveResp?

// FileMoveRequest 示例
val moveRequest = FileMoveRequest() 
moveRequest.driveId = ""                    // 文件的driveId
moveRequest.fileId = ""                     // 文件的fileId
moveRequest.toDriveId = ""                  // 移动目标文件夹的driveId
moveRequest.newName = ""                    // 文件移动后的新名字
moveRequest.toParentId = "root"             // 移动目标文件夹的fileId(root为根目录)

更新文件、文件夹

fun fileUpdate(updateRequest: FileUpdateRequest): FileGetResp?

// FileUpdateRequest 示例
val updateRequest = FileUpdateRequest()
updateRequest.driveId = item.driveId!!      // 实施更新操作的用户driveId
updateRequest.fileId = item.fileId          // 文件的fileId
updateRequest.name = ""                     // 文件更新后的新名字

删除文件、文件夹

fun fileDelete(deleteRequest: FileDeleteRequest): FileDeleteResp?

// FileDeleteRequest 示例
val delRequest = FileDeleteRequest()
delRequest.driveId = ""                     // 实施删除操作的用户driveId
delRequest.fileId = ""                      // 需要删除文件或文件夹的fileId

搜索文件

fun fileSearch(fileSearchRequest: FileSearchRequest): FileListResp?

// FileSearchRequest示例  
// query规则可参考 https://help.aliyun.com/document_detail/175890.html
val request = FileSearchRequest()
request.query = "name match '$keyStr' and status = 'available'"     // keyStr:搜索关键词
request.driveId = ""  

其他

// 获取文件分片的上传地址
fun fileGetUploadUrl(getUploadUrlRequest: FileGetUploadUrlRequest): FileGetUploadUrlResp?

// 完成文件上传
fun fileComplete(completeRequest: FileCompleteRequest): FileGetResp?

// 获取文件下载地址
fun fileGetDownloadUrl(getDownloadUrlRequest: FileGetDownloadUrlRequest): FileGetDownloadUrlResp?

// 异步任务状态,例如删除包含多个文件的文件夹,此时是一个异步任务,可以通过这个接口获取任务状态
fun getAsyncTask(getAsyncTaskRequest: AsyncTaskRequest): AsyncTaskResp?

阿里云首页 网盘与相册服务 相关技术圈