乐趣区

关于android:快速集成华为AGC云存储服务Android

华为 AppGallery Connect 提供了一个云存储(CloudStorage)的服务,号称提供了一个便捷的云端存储服务,利用开发者应用的时候,能够不必关注服务器的部署,间接应用就行。

目前这个性能还在 bate 阶段,我先领先体验了一下。如果你想疾速体验云存储服务的性能,请参考 demo。

1、环境与利用信息

版本名称 集成环境 测试设施
agconnect-storage:1.3.1.100 Android Studio 光荣 Magic 2

AGC 地址:https://developer.huawei.com/consumer/cn/service/josp/agc/index.html
SDK 集成形式:Maven 仓集成,对接华为 Maven 仓:
implementation ‘com.huawei.agconnect:agconnect-storage:1.3.1.100’

2、在 AGC 上开明云存储:

PS:云存储服务目前还处于 beta 状态,我是发了邮件申请开明才能够应用的:

https://developer.huawei.com/consumer/cn/doc/development/AppGallery-connect-Guides/agc-cloudstorage-apply

我的我的项目 下抉择你的开发我的项目,在 构建 上面,找到 云存储 服务,点击开明:

没有 Android 我的项目的话,能够先本人创立一个。

开明服务的时候,须要先配置存储实例,这里按需配置就能够,我就轻易配置一个。

下一步,还须要配置安全策略,这里应用默认的安全策略就好:
PS:默认的状况是,只有通过身份认证的用户能力进行读写。

3、在 Android 我的项目里集成 SDK

a) 集成 SDK

1、在我的项目级的 gradle 文件中增加华为 Maven,配置如下内容

buildscript {
repositories {
//…
        maven {url 'https://developer.huawei.com/repo/'}
    }
    dependencies {
        //…
        classpath 'com.huawei.agconnect:agcp:1.4.1.300'
    }
}
 
allprojects {
repositories {
//…
        maven {url 'https://developer.huawei.com/repo/'}
    }
}

2、关上利用级的 build.gradle 文件,配置好云存储的 SDK 和华为认证服务的 SDK,配置上面标红的内容即可。留神别落了下面的 agcp 插件

apply plugin: 'com.android.application'
apply plugin: 'com.huawei.agconnect'
android {…..}
 
dependencies {
    //…
    implementation 'com.huawei.agconnect:agconnect-auth:1.4.1.300'
    implementation 'com.huawei.agconnect:agconnect-storage:1.3.1.100'
}

b) 下载 json 文件,并且配置默认存储实例

1、在 AGC 界面上,抉择 我的我的项目 -> 我的项目设置–> 惯例 上面,下载 agconnect-services.json 文件到你的 Android 我的项目的 app 门路下。

2、记得查看你的 json 文件,留神是否有 default_storage,如果没有的话,须要自行添加。

4、前置步骤

1、申请权限
须要先申请文件的读写权限和网络拜访权限,在 Mainfest.xml 文件外面 application 的外层,配置上面这些代码来申请权限:

留神 android:allowBackup 的参数必须为 false。

<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
    <application
        android:allowBackup="false"/>

2、界面布局
设置几个按钮,通过点击按钮来实现性能:包含上传,下载文件,和删除文件的按钮。

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:orientation="vertical"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:gravity="center_vertical"
    tools:context=".MainActivity">
 
    <Button
        android:onClick="uploadFile"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:textAllCaps="false"
        android:text="Upload File" />
 
    <Button
        android:onClick="downloadFile"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:textAllCaps="false"
        android:text="Download File" />
 
    <Button
        android:onClick="deleteFile"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:textAllCaps="false"
        android:text="Delete File" />
 
    <TextView
        android:id="@+id/showResult"
        android:enabled="false"
        android:hint="This will display the result of the operation"
        android:layout_width="match_parent"
        android:layout_marginTop="10dp"
        android:gravity="center"
        android:layout_height="wrap_content" />
   
</LinearLayout>

5、性能开发:

1、先初始化参数
在 MainActivity,先初始化参数:包含,云存储实例,展现音讯框,以及相干权限。

private AGCStorageManagement mAGCStorageManagement;
    private TextView mShowResultTv;
    private String[] permissions = {
            Manifest.permission.WRITE_EXTERNAL_STORAGE,
            Manifest.permission.READ_EXTERNAL_STORAGE,
    };
 
    @Override
    protected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        mShowResultTv = findViewById(R.id.showResult);
        AGConnectInstance.initialize(getApplicationContext());
        login();
        ActivityCompat.requestPermissions(this, permissions, 1);
    }

2、相干办法:匿名登录 & 获取门路
匿名认证办法:对于云存储的数据操作,须要通过华为认证服务,这里为了简化,就仅应用华为的 匿名认证

private void login() {if (AGConnectAuth.getInstance().getCurrentUser() != null) {System.out.println("already sign a user");
            return;
        }
        AGConnectAuth.getInstance().signInAnonymously().addOnSuccessListener(new OnSuccessListener<SignInResult>() {
            @Override
            public void onSuccess(SignInResult signInResult) {System.out.println("AGConnect OnSuccess");
            }
        }).addOnFailureListener(new OnFailureListener() {
            @Override
            public void onFailure(Exception e) {// onFail}
        });
}

获取文件门路的办法:对于云存储的数据操作,上传时候本地文件的获取,以及云端文件的下载寄存,都是在这个门路下,即 /AGCSdk门路下

private String getAGCSdkDirPath() {String path = Environment.getExternalStorageDirectory().getAbsolutePath() + "/AGCSdk/";
        System.out.println("path=" + path);
        File dir = new File(path);
        if (!dir.exists()) {dir.mkdirs();
        }
        return path;
    }

3、初始化云存储实例
云存储的每一步操作之前,都须要确保曾经进行初始化了云存储实例

private void initAGCStorageManagement() {mAGCStorageManagement = AGCStorageManagement.getInstance();
}

4、上传文件:
须要先获取到本地文件,以及这个文件的门路,而后创立文件援用,对文件的进行上传的 uploadTask 操作。

public void uploadFile(View view) {if (mAGCStorageManagement == null) {initAGCStorageManagement();
    }
    final String path = "test.jpg";
    String fileName = "test.jpg";
    String agcSdkDirPath = getAGCSdkDirPath();
    final File file = new File(agcSdkDirPath, fileName);
    if (!file.exists()) {mShowResultTv.setText("file is not exist!");
        return;
    }
    StorageReference storageReference = mAGCStorageManagement.getStorageReference(path);
    UploadTask uploadTask = storageReference.putFile(file);
    try {uploadTask.addOnSuccessListener(new OnSuccessListener<UploadTask.UploadResult>() {
            @Override
            public void onSuccess(UploadTask.UploadResult uploadResult) {mShowResultTv.setText("upload success!");
            }
        }).addOnFailureListener(new OnFailureListener() {
            @Override
            public void onFailure(Exception e) {mShowResultTv.setText("upload failure!" + e.getMessage());
            }
        });
    } catch (Exception e) {e.printStackTrace();
    }
}

5、下载文件:
须要先在本地设施中创立该文件,包含这个文件的门路和文件名。而后创立一个云端文件名称的援用,对这个文件的援用的进行下载的 downloadTask 操作。

public void downloadFile(View view) {if (mAGCStorageManagement == null) {initAGCStorageManagement();
    }
    String fileName = "download_" + System.currentTimeMillis() + ".jpg";
    final String path = "test.jpg";
    String agcSdkDirPath = getAGCSdkDirPath();
    final File file = new File(agcSdkDirPath, fileName);
    StorageReference storageReference = mAGCStorageManagement.getStorageReference(path);
    DownloadTask downloadTask = storageReference.getFile(file);
    try {downloadTask.addOnSuccessListener(new OnSuccessListener<DownloadTask.DownloadResult>() {
            @Override
            public void onSuccess(DownloadTask.DownloadResult downloadResult) {mShowResultTv.setText("download success!");
            }
        }).addOnFailureListener(new OnFailureListener() {
            @Override
            public void onFailure(Exception e) {mShowResultTv.setText("download failure!" + e.getMessage());
            }
        });
    } catch (Exception e) {e.printStackTrace();
    }
}

6、删除文件:
首先,先指定一个文件名为 test.jpg 的文件,对这个文件名创立一个援用,而后对该援用执行 deleteTask 操作,就能够将云端的 test.jpg 删除了。

public void deleteFile(View view) {if (mAGCStorageManagement == null) {initAGCStorageManagement();
        }
 
        final String path = "test.jpg";
        System.out.println(String.format("path=%s", path));
        StorageReference storageReference = mAGCStorageManagement.getStorageReference(path);
        Task<Void> deleteTask = storageReference.delete();
        try {deleteTask.addOnSuccessListener(new OnSuccessListener<Void>() {
                @Override
                public void onSuccess(Void aVoid) {mShowResultTv.setText("delete success!");
                }
            }).addOnFailureListener(new OnFailureListener() {
                @Override
                public void onFailure(Exception e) {mShowResultTv.setText("delete failure!" + e.getMessage());
                }
            });
        } catch (Exception e) {e.printStackTrace();
        }
    }

6、打包测试:

Android Studio 连贯手机,而后将该安卓我的项目运行到手机上。

1、筹备好初始文件

关上手机的文件管理器,找到 外部存储 /AGCSdk/ 门路下,增加并且筹备一个 test.jpg 文件。如下图所示:

2、上传文件 & 上传后果

关上刚刚的利用,点击 Upload File 按钮,查看上传后果

此时 AGC 界面上,也能够看到刚刚上传的文件:

2、下载文件 & 下载后果

在利用内点击下载按钮,能够看到界面显示 下载胜利。

此时回到文件管理器,能够看到刚刚下载的文件。

2、删除文件 & 删除后果

点击利用外面的删除按钮,能够看到利用界面上显示删除胜利。

此时到 AGC 界面上确认下载后果,发现刚刚的 test.jpg 文件曾经被删除了

7、总结

仅关注前端利用的开发,就能够开发一个带云端存储服务器的利用。再也不必为了服务器的搭建和运维放心,省时省力。而且还提供了相似于管理员模式的 web 控制台,能够简略直观的对服务器上的文件进行治理。

这个云存储服务,除了最一般的上传下载和删除性能,还包含有列举文件,设置元数据等性能,具体能够看官网文档:

云存储服务开发指南:

https://developer.huawei.com/consumer/cn/doc/development/AppGallery-connect-Guides/agc-cloudstorage-introduction

云存储 codelab:

https://developer.huawei.com/consumer/cn/codelab/CloudStorage/index.html#1


原文链接:https://developer.huawei.com/consumer/cn/forum/topic/0201411971207960391?fid=0101271690375130218

原作者:Mayism

退出移动版