oss安卓开发

阿里云对象存储(OSS)是一种云存储解决方案,提供安全、高可用、高扩展、低成本的数据存储服务。它可用于存储图片、音视频、文档等各种多媒体文件,也可用于搭建各种类型的网站文件系统、移动APP数据存储等。 OSS 还提供 Restful API 接口、SDK 工具和丰富的管理控制台,使开发人员和管理员能够更轻松地管理和访问存储的文件。

本文将主要介绍 OSS 在安卓开发中的原理和使用方式。

## OSS 安卓 SDK

OSS 安卓 SDK 通常是以 jar 包的形式提供给开发者使用。在安卓开发中,我们可以将其下载到本地文件,然后在工程中导入,就可以使用 OSS 提供的 API 接口进行开发。

目前 OSS 提供在安卓端的 SDK 可以在官网上进行下载,其链接如下:

```

https://help.aliyun.com/document_detail/32013.html

```

## SDK 使用流程

下面我们就以安卓 APP 开发为例,介绍 OSS SDK 的使用流程。

### 1.导入 SDK

下载 OSS SDK 并在项目中导入oss-android-sdk-x.x.x.jar 包。

### 2.配置权限

在安卓Manifest.xml 文件中配置以下权限:

```

```

### 3.初始化 SDK

在 Application 中初始化 OSSClient:

```java

public class MyApplication extends Application{

private OSS oss;

@Override

public void onCreate() {

super.onCreate();

OSSLog.enableLog();

OSSCredentialProvider credentialProvider = new OSSPlainTextAKSKCredentialProvider("YourAccessKeyId", "YourAccessKeySecret");

OSS oss = new OSSClient(getApplicationContext(), "YourEndpoint", credentialProvider);

}

public OSS getOss() {

return oss;

}

}

```

其中,`YourAccessKeyId` 和 `YourAccessKeySecret` 是你在阿里云账号中申请的 Access Key,`YourEndpoint` 是给 OSS 分配的域名。

### 4.简单上传

使用 OSSClient 的 `putObject`接口进行简单上传。

```java

public class OssService {

private static final String endpoint = "**YourEndpoint**";

private static final String callbackAddress = "**YourCallbackAddress**";

private static final String accessKeyId = "**YourAccessKeyId**";

private static final String accessKeySecret = "**YourAccessKeySecret**";

private static final String testBucket = "**YourBucketName**";

private static final String testObject = "**YourObjectName**";

private static final String uploadFilePath = "**YourUploadFilePath**";

public OSS getOss(Context context) {

OSSCredentialProvider credentialProvider = new OSSPlainTextAKSKCredentialProvider(accessKeyId, accessKeySecret);

OSS oss = new OSSClient(context, endpoint, credentialProvider);

return oss;

}

public void asyncPutObjectFromLocalFile() {

// 构造上传请求

PutObjectRequest put = new PutObjectRequest(testBucket, testObject, uploadFilePath);

OSSAsyncTask task = getOss(context).asyncPutObject(put, new OSSCompletedCallback() {

@Override

public void onSuccess(PutObjectRequest request, PutObjectResult result) {

Log.d("PutObject", "UploadSuccess");

Log.d("ETag", result.getETag());

Log.d("RequestId", result.getRequestId());

}

@Override

public void onFailure(PutObjectRequest request, ClientException clientException, ServiceException serviceException) {

// 请求异常

if (clientException != null) {

// 本地异常如网络异常等

clientException.printStackTrace();

}

if (serviceException != null) {

// 服务异常

Log.e("ErrorCode", serviceException.getErrorCode());

Log.e("RequestId", serviceException.getRequestId());

Log.e("HostId", serviceException.getHostId());

Log.e("RawMessage", serviceException.getRawMessage());

}

}

});

}

}

```

其中,`PutObjectRequest` 中设置待上传文件的 Bucket 名称、上传路径和本地文件的绝对路径;OSSAsyncTask 控制上传任务的异步执行结果。

### 5. 简单下载

使用 OSSClient 的 `getObject` 接口进行简单下载。

```java

public class OssService {

// 上文代码省略...

public void asyncGetObject() {

// 构造下载文件请求

GetObjectRequest get = new GetObjectRequest(testBucket, testObject);

OSSAsyncTask task = getOss(context).asyncGetObject(get, new OSSCompletedCallback() {

@Override

public void onSuccess(GetObjectRequest request, GetObjectResult result) {

InputStream inputStream = result.getObjectContent();

try {

FileOutputStream outputStream = new FileOutputStream(Environment.getExternalStorageDirectory() + "/oss/" + testObject);

byte[] buffer = new byte[2048];

int len;

while ((len = inputStream.read(buffer)) != -1) {

outputStream.write(buffer, 0, len);

}

outputStream.close();

inputStream.close();

} catch (IOException e) {

e.printStackTrace();

}

}

@Override

public void onFailure(GetObjectRequest request, ClientException clientException, ServiceException serviceException) {

// 请求异常

if (clientException != null) {

// 本地异常如网络异常等

clientException.printStackTrace();

}

if (serviceException != null) {

// 服务异常

Log.e("ErrorCode", serviceException.getErrorCode());

Log.e("RequestId", serviceException.getRequestId());

Log.e("HostId", serviceException.getHostId());

Log.e("RawMessage", serviceException.getRawMessage());

}

}

});

}

}

```

其中,`GetObjectRequest` 中设置下载文件的 Bucket 名称和下载路径;OSSAsyncTask 控制下载任务的异步执行结果。

## 结语

OSS 提供安卓 SDK,方便开发者在安卓 APP 中使用它的服务,通过本文,希望可以帮助读者掌握 OSS 安卓开发的核心原理和使用方式。


相关知识:
安卓8
在安卓开发过程中,经常需要进行一些特殊设置和操作,这需要用到开发者密码(也称为USB调试密码)。本文将介绍如何在安卓8.1系统上设置开发者密码,并探讨其原理。第一步:打开开发者选项在开始设置开发者密码之前,我们需要先打开开发者选项。操作路径如下:Setti
2023-05-23
安卓4
开发者选项是安卓系统中非常重要的一部分,它可以帮助开发人员测试、调试和优化自己的应用程序。在安卓4.4中,开发者选项是一个很强大的工具,它提供了一些非常有用的功能和选项,同时也需要一些特殊的设置和注意事项。在本文中,我们将详细介绍安卓4.4开发者选项的原理
2023-05-23
安卓4
安卓4.4.2是一款由谷歌公司推出的智能手机操作系统,在这个操作系统中,开发者选项是一个非常重要的功能。开发者选项提供了一系列的调试工具和选项,让开发人员能够更加轻松地进行调试和测试任务。在本文中,我们将详细介绍安卓4.4.2开发者选项的原理和使用方法。安
2023-05-23
stm32开发板能用安卓平板吗
首先,STM32开发板是一种用于嵌入式系统的开发板,通常用于嵌入式开发、物联网、机器人等领域。而安卓平板是一种消费电子设备,用于智能终端、娱乐和移动办公等场景。但是,我们可以通过连接STM32开发板和安卓平板来实现一些嵌入式应用的控制和数据传输。具体来说,
2023-05-23
rk3588开发板安卓固件
RK3588 开发板是一款基于六核心 ARM 处理器的嵌入式系统开发板,具有出色的性能和可靠性。该板支持多种开发板环境,其中包括 Android 系统,让开发人员可以更快地开发、测试和部署应用程序。在这篇文章中,我们将介绍如何为 RK3588 开发板创建安
2023-05-23
qt开发的安卓ap
Qt是一款跨平台的应用程序开发框架,可用于开发各种类型的应用程序,包括桌面、移动和嵌入式应用程序。Qt开发框架支持许多不同的平台,包括Linux、Windows、OS X、iOS和Android等。在本文中,我们将详细介绍如何使用Qt开发Android应用
2023-05-23
koltin安卓开发
Kotlin是一种由JetBrains开发的静态类型编程语言,专为现代开发而设计。Kotlin旨在消除Java中的某些设计缺陷并提供更好的Android开发体验。Kotlin具有Java的互操作性,因此它可以很好地与Java一起使用。以下是关于Kotlin
2023-05-23
西昌安卓的app开发
安卓 app 开发是指用于自定义 Android 设备功能和用户界面的应用程序开发。开发这类应用程序的人员被称为安卓开发者,他们使用安卓提供的强大 API 接口,为各类终端用户提供便利服务。原理:安卓是基于 Linux 内核的开源操作系统,采用了虚拟机技术
2023-04-28
电脑制作安卓app
制作安卓App,一般需要掌握Java或Kotlin编程语言,以及安卓SDK(软件开发工具包)。以下是一个简单的步骤介绍:1. 安装Java开发工具集(Java Development Kit, JDK)在电脑上安装JDK,这是制作安卓应用程序的必要前提,使
2023-04-28
安卓地图app开发
在本教程中,我们将了解如何开发一个简易的安卓地图应用。该应用的主要功能是在地图中显示用户的位置,并允许用户搜索特定地址 。为了实现这个目标,我们将使用Android Studio、Google Maps API以及Geocoding API。第一步:准备开
2023-04-28
安卓app开发毕业设计
安卓应用开发是计算机科学和技术专业及相关专业的学生在毕业设计中的热门方向之一。本文将简要介绍如何进行一个安卓应用开发的毕业项目,并提供详细的内容和步骤。1. 选题:选择一个项目题目是安卓应用开发毕业设计的第一步。结合自己所在的专业和兴趣,选择一款具有现实意
2023-04-28
安卓app开发外包需要注意什么
在安卓app开发外包时,您需要注意以下几点来确保项目的顺利进行和最终结果的质量。以下是一些建议和详细介绍。1. 确定项目需求和目标在寻找外包合作伙伴之前,首先需要明确自己的项目需求和目标。整理一份详细的需求文档,包括软件功能列表、交互设计、用户界面设计以及
2023-04-28
©2015-2023 安卓益APP Anzhuoe.com 蜀ICP备17007734号-1