简介

HMS Core Drive SDK(简称Drive)允许您创建使用华为云盘的应用程序,华为云盘可以为您的应用提供云端存储功能,让用户在使用您开发的应用时产生的文件保存到云盘,也可以下载和同步在华为云盘中的所有文件,包括照片、视频、以及文档等。同时华为云盘为各类数据提供了全方位的安全保障,让用户更安全、便捷地管理数据。
当前Huawei Drive Kit的核心能力包括文件的上传和下载,以及云端文件变化查询、监听等。

您将建立什么

在这个Codelab中,您将创建出一款可以使用华为云盘功能的Android应用程序,可以通过华为HMS Core Drive SDK方便快捷管理、编辑华为云盘上的文件,也可以在云盘上保存照片、绘图、录音、视频和各类设计作品。用户可以在其他智能手机、平板电脑或计算机上使用华为云盘中的文件。

您将会学到什么

您需要什么

硬件要求

软件要求

集成HUAWEI HMS能力,需要完成以下准备工作

具体操作,请按照《HMS Core 3.0集成准备》中详细说明来完成。

开通相关服务

点击"开发"-"概览"-"API管理",进入服务管理菜单

打开"Huawei Drive"服务开关和"Huawei ID"服务开关。

集成HMS SDK和Drive SDK

添加当前应用的agconnect-services.json配置文件

将下载的"agconnect-services.json"文件移至AndroidStudio开发工程app的根目录下

配置gradle的maven配置

1.配置HMS SDK和Drive SDK的maven仓地址,打开AndroidStudio项目级build.gradle文件。

2.在allprojects ->repositories和buildscript->repositories里面配置HMS SDK的maven仓地址

repositories { maven {url 'http://developer.huawei.com/repo/'} }

3.在buildscript -> dependencies里面增加配置。

buildscript { dependencies { classpath 'com.huawei.agconnect:agcp:1.0.0.300' } }

添加编译依赖。

1.打开应用级的build.gradle文件。

2.在文件头添加配置

apply plugin: 'com.huawei.agconnect'

3.在"dependencies "中添加如下编译依赖。

dependencies { implementation 'com.huawei.hms:drive:3.0.0.300' implementation 'com.huawei.hms:hwid:3.0.0.301' implementation 'com.huawei.hms:push:3.0.0.301' implementation 'com.huawei.hms:opendevice:3.0.0.301' }

4.重新打开修改完的build.gradle文件,右上方出现Sync Now链接。点击"Sync Now"等待同步完成。

5.多语言设置。

● 如果您的应用不需要设置只支持某些特定语言,则请忽略本步骤。应用将默认支持所有HMS SDK支持的语言。

● 如果您的应用需要设置只支持某些特定语言,则可通过本步骤配置。

打开应用级根目录的build.gradle文件。

android->defaultConfig中新增resConfigs配置,en(英语) 和 zh-rCN(简体中文)为必须配置的语种,配置格式如下:

android { defaultConfig { ... resConfigs "en", "zh-rCN","需要支持的其他语言" } }

配置混淆脚本

开发者编译APK前需要配置不要混淆HMS SDK,避免功能异常。

1.打开Android工程的混淆配置文件app/proguard-rules.pro,

2.加入排除HMS SDK的混淆配置。

-ignorewarning -keepattributes *Annotation* -keepattributes Exceptions -keepattributes InnerClasses -keepattributes Signature -keepattributes SourceFile,LineNumberTable -keep class com.hianalytics.android.**{*;} -keep class com.huawei.updatesdk.**{*;} -keep class com.huawei.hms.**{*;} -keep class com.huawei.api.client.drive.**{*;}

3.如果开发者使用了AndResGuard,需要在混淆配置文件中加入AndResGuard白名单。

"R.string.hms*", "R.string.connect_server_fail_prompt_toast", "R.string.getting_message_fail_prompt_toast", "R.string.no_available_network_prompt_toast", "R.string.third_app_*", "R.string.upsdk_*", "R.layout.hms*", "R.layout.upsdk_*", "R.drawable.upsdk*", "R.color.upsdk*", "R.dimen.upsdk*", "R.style.upsdk*"

登录华为账号

通过HMS SDK登陆时,需要设置Drive Scope,用于获取访问Drive接口的权限:

HuaweiIdSignInOptions signInOptions = new HuaweiIdSignInOptions.Builder(HuaweiIdSignInOptions.DEFAULT_SIGN_IN) .requestAccessToken() .requestIdToken("") .requestScopes(HuaweiId.HUAEWEIID_BASE_SCOPE) // 账号基本权限 .requestScopes(new Scope(DriveScopes.DRIVE)) //所有权限,除了应用文件夹权限 .requestScopes(new Scope(DriveScopes.DRIVE_METADATA)) //允许访问元数据,但不包括实体 .requestScopes(new Scope(DriveScopes.DRIVE_METADATA_READONLY)) //允许只读访问元数据,但不包括实体 .requestScopes(new Scope(DriveScopes.DRIVE_READONLY)) //允许只读访问文件内容和元数据 .build();

不同的DriveScope对应不同的权限, 第三方开发者可以根据自己的业务需要申请对应权限,API的使用详见《华为账号开发者文档》,如果用户未登陆华为账号,HMS SDK会引导用户登陆。

// 调用账号接口, 获取信息 HuaweiIdSignInClient client = HuaweiIdSignIn.getClient(this,signInOptions); startActivityForResult(client.getSignInIntent(), REQUEST_SIGN_IN_LOGIN);
// 账号信息的获取时异常流程, 在该函数获取并保存拿到的accesToken和unionID @Override protected void onActivityResult(int requestCode, int resultCode, Intent data) { if (requestCode == REQUEST_SIGN_IN_LOGIN) { Task<SignInHuaweiId> signInHuaweiIdTask = HuaweiIdSignIn.getSignedInAccountFromIntent(data); if (signInHuaweiIdTask.isSuccessful()) { SignInHuaweiId huaweiAccount = signInHuaweiIdTask.getResult(); accesToken = huaweiAccount.getAccessToken(); unionId = huaweiAccount.getUnionId(); TextView textView = findViewById(R.id.textView); textView.setText("login success"); } else { Logger.e("MainActivity", "onActivityResult, signIn failed: " + ((ApiException) signInHuaweiIdTask.getException()).getStatusCode()); Toast.makeText(getApplicationContext(), "onActivityResult, signIn failed.", Toast.LENGTH_LONG).show(); } } }

初始化Drive

调用Files.create接口进行文件上传

接口说明

接口名:

public Create create(File content) throws java.io.IOException public Create create(File content, java.io.File content) throws java.io.IOException

接口描述:
用于创建文件和文件夹, 具体接口使用详见《华为云盘服务开发者文档》

设置读写权限

app/src/main/AndroidManifest.xml中添加手机存储的读写权限

<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" /> <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />

在MainActivity.java 的oncreate函数添加权限申请

private static String[] PERMISSIONS_STORAGE = { Manifest.permission.READ_EXTERNAL_STORAGE, Manifest.permission.WRITE_EXTERNAL_STORAGE}; if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) { requestPermissions(PERMISSIONS_STORAGE, 1); }

加上申请权限的代码片段

处理菜单项upload事件

在用户网盘根目录创建一个新目录文件夹, 然后将内置存储目录下的文件上传到该新建目录

new Thread(new Runnable() { @Override public void run() { try { // 创建文件夹 File file = new File(); file.setName("somepath").setMimeType("application/vnd.huawei-apps.folder"); directoryCreated = drive.files().create(file).execute(); // 上传文件 File content = new File() .setName("test.jpg") .setMimeType("image/jpeg") .setParents(Collections.singletonList(directoryCreated.getId())); java.io.File fileObject = new java.io.File("/storage/emulated/0/DCIM/Camera/test.jpg"); drive.files().create(content, fileObject).execute(); MainActivity.this.runOnUiThread(new Runnable() { @Override public void run() { TextView textView = findViewById(R.id.textView); textView.setText("directory create success"); } }); } catch (IOException ex) { Logger.e("create", ex); } }

创建成功后可以通过文件管理登录华为云盘查看新上传的文件

调用Files.delete接口清理上传的文件

接口说明

public Delete delete (String fileID) throws java.io.IOException

处理菜单项delete事件

if (id == R.id.action_delete) { new Thread(new Runnable() { @Override public void run() { try { // 删除文件夹 Drive.Files.Delete deleteFileReq = drive.files().delete(directoryCreated.getId()); deleteFileReq.execute(); MainActivity.this.runOnUiThread(new Runnable() { @Override public void run() { TextView textView = findViewById(R.id.textView); textView.setText("delete success"); } }); } catch (IOException ex) { Logger.e("delete", ex); } } }).start(); }

Drive服务示例代码运行效果

在Android Studio中,单击"运行"。然后,选择您的设备作为 目标,然后单击"确定"以在设备上启动示例应用程序。程序运行界面如下:

下载Drive服务示例代码

您可以直接下载Drive服务示例代码,进行Drive服务开发体验。

源码下载

祝贺您,您已经成功地构建了您的第一个Drive服务应用程序!

您学习了如何Drive SDK的相关知识,并学习了如何创建属于您自己的Drive服务应用程序。您学习了如何在Android Studio中运行Drive Demo程序。

现在,您知道了创建集成Drive服务应用的所有关键操作。

接下来您可以

看看这些代码片段...

您可以阅读下面链接,了解更多相关的信息。

相关文档.

已复制代码