Overview

Cloud Storage is scalable and maintenance-free. By integrating the Cloud Storage SDK, you can store high volumes of data such as image, audio, and video files generated by your users to the cloud or download these data from the cloud.

What You Will Create

In this codelab, you will create an app that integrates Cloud Storage capabilities. Your app will allow users to:

What You Will Learn

Development Environment and Skill Requirements

Device Requirements

A device running Android 4.2 or a later version

To integrate Cloud Storage of AppGallery Connect, you must complete the following preparations:

Enabling Cloud Storage

Before integrating the Cloud Storage SDK, you need to enable Cloud Storage in AppGallery Connect.

  1. Sign in to AppGallery Connect and click My projects.
  2. Click the project for which you need to enable Cloud Storage.
  3. Go to Build > Cloud Storage. On the Cloud Storage page, click Enable now.
  4. Enter the storage instance name and select the default data processing location.
  5. Click Next and view the default security rules.
  6. Click Finish.

Integrating the Cloud Storage SDK

If you are using Android Studio, you need to integrate the Cloud Storage SDK into your Android Studio project before development.

  1. Sign in to AppGallery Connect and click My projects.
  2. Find and click your project.
  3. Go to Project settings > General information. In the App information area, download the agconnect-services.json file.
  4. Copy the agconnect-services.json file to your app's module directory.
  5. Open the app-level build.gradle file and add the following code to integrate the Cloud Storage SDK:
    // Configure an address. apply plugin: 'com.huawei.agconnect' dependencies { // Add the dependency related to the AppGallery Connect framework before adding a storage dependency. implementation 'com.huawei.agconnect:agconnect-storage:1.5.0.100' }
  6. Click Sync Now to synchronize the configuration.
  1. Create a layout page in the Android Studio project and add two buttons and a TextView to this page.
    <?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="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>
  2. Add the following buttons and TextView:
    • Upload File: uploads a file.
    • Delete File: deletes a file.
    • TextView: displays the result of triggering the previous buttons.
  3. Design the UI as follows.

The sample code in this codelab uses the anonymous sign-in mode. Therefore, you need to enable anonymous authentication of Auth Service in AppGallery Connect. Otherwise, sign-in fails.

  1. Sign in to AppGallery Connect and click My projects.
  2. Find and click your project.
  3. Go to Build > Auth Service. If it is the first time that you use Auth Service, click Enable now in the upper right corner.
  4. Click the Authentication mode tab and click Enable in the Operation column for Anonymous account.
  5. Add the following build dependencies to the app-level build.gradle file (usually in the app directory) to integrate the Auth Service SDK:
    implementation 'com.huawei.agconnect:agconnect-core:1.6.5.300' implementation 'com.huawei.agconnect:agconnect-auth:1.6.5.300'
  6. Add permissions to the AndroidManifest.xml file.
    <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" />
  7. Call the method for requesting permissions in onCreate of MainActivity. The sample code is as follows:
    private String[] permissions = { Manifest.permission.WRITE_EXTERNAL_STORAGE, Manifest.permission.READ_EXTERNAL_STORAGE, }; ActivityCompat.requestPermissions(this, permissions, 1);
  8. Call methods related to Auth Service in onCreate of MainActivity. The sample code for anonymous authentication is as follows (before verifying Cloud Storage functions, ensure that anonymous sign-in is successful):
    private void login() { if (AGConnectAuth.getInstance().getCurrentUser() != null) { System.out.println("already sign a user"); return; } AGConnectAuth.getInstance().signInAnonymously().addOnSuccessListener(signInResult -> System.out.println("AGConnect OnSuccess")) .addOnFailureListener(e -> System.out.println("AGConnect OnFail: " + e.getMessage())); }

You can call related APIs of the Cloud Storage SDK to develop functions.

Initializing the Service

Call the AGCStorageManagement.getInstance method to initialize a storage instance before your app uses any Cloud Storage functions.

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

Uploading a File

Tap Upload File. The uploadFile method is called to upload a file to the cloud server.

public void uploadFile(View view) { if (mAGCStorageManagement == null) { initAGCStorageManagement(); } uploadFile(); } private void uploadFile() { 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 does not exist!"); return; } new Thread(new Runnable() { @Override public void run() { 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!"); } }); } catch (Exception e) { e.printStackTrace(); } } }).start(); }

The file to be uploaded is configured in the project code, that is, the test.jpg file in the AGCSdk directory of the mobile phone.

Deleting a File

Tap Delete File. The deleteFile method is called to delete the uploaded file from the cloud.

public void deleteFile(View view) { if (mAGCStorageManagement == null) { initAGCStorageManagement(); } deleteFile(); } private void deleteFile() { final String path = "test.jpg"; System.out.println(String.format("path=%s", path)); new Thread(new Runnable() { @Override public void run() { 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!"); } }); } catch (Exception e) { e.printStackTrace(); } } }).start(); }
  1. View related methods in onCreate.
    @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. To obtain the file path, use the getAGCSdkDirPath method.
    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; }
  1. Run your Android Studio project and generate an APK. Then, install the APK on your mobile phone for testing.
  2. Run the installed APK, tap Upload File, and upload the test.jpg file on the mobile phone.
  3. Go to the Cloud Storage page and view the uploaded file on the Files tab page.
  4. Tap Delete File to delete the uploaded test.jpg file. You can view the deletion result under Cloud Storage > Files.

Well done. You have successfully built an app that integrates Cloud Storage of AppGallery Connect and learned how to manage Cloud Storage in AppGallery Connect.

Code copied