• 快速集成华为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

  • 相关阅读:
    ruby 中super和super()的区别
    SeleniumWebdriver系列教程(2)————浏览器的简单操作
    ruby设计模式之合成模式1————基本的合成模式
    ruby中::究竟代表什么?
    手工测试用例就是自动化测试脚本——使用ruby 1.9新特性进行自动化脚本的编写
    如何使用bluecloth
    如何使用ruby去实例化1个autoit对象
    Ruby设计模式之策略模式二————更ruby些的策略模式
    SeleniumWebdriver系列教程(1)————快速开始
    Seleniumwebdriver系列教程(3)————如何执行一段js脚本
  • 原文地址:https://www.cnblogs.com/developer-huawei/p/14431609.html
Copyright © 2020-2023  润新知