華爲AppGallery Connect提供了一個雲存儲(CloudStorage)的服務,號稱提供了一個便捷的雲端存儲服務,應用開發者使用的時候,能夠不用關注服務器的部署,直接使用就行。html
目前這個功能還在bate階段,我先搶先體驗了一下。若是你想快速體驗雲存儲服務的功能,請參考demo。前端
版本名稱 | 集成環境 | 測試設備 |
---|---|---|
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'java
PS: 雲存儲服務目前還處於beta狀態,我是發了郵件申請開通才能夠使用的:android
https://developer.huawei.com/consumer/cn/doc/development/AppGallery-connect-Guides/agc-cloudstorage-applygit
在個人項目 下選擇你的開發項目,在構建下面,找到雲存儲服務,點擊開通:github
沒有Android項目的話,能夠先本身建立一個。web
開通服務的時候,須要先配置存儲實例,這裏按需配置就能夠,我就隨便配置一個。json
下一步,還須要配置安全策略,這裏使用默認的安全策略就好:
PS:默認的狀況是,只有通過身份認證的用戶才能進行讀寫。安全
一、在項目級的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/'} } }
二、打開應用級的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' }
一、在AGC界面上,選擇 個人項目 -> 項目設置–> 常規 下面,下載agconnect-services.json文件到你的Android項目的app路徑下。
二、記得查看你的json文件,注意是否有default_storage,若是沒有的話,須要自行添加。
一、申請權限
須要先申請文件的讀寫權限和網絡訪問權限,在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"/>
二、界面佈局
設置幾個按鈕,經過點擊按鈕來實現功能:包括上傳,下載文件,和刪除文件的按鈕。
<?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>
一、先初始化參數
在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); }
二、相關方法:匿名登陸&獲取路徑
匿名認證方法:對於雲存儲的數據操做,須要通過華爲認證服務,這裏爲了簡化,就僅使用華爲的匿名認證:
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; }
三、初始化雲存儲實例
雲存儲的每一步操做以前,都須要確保已經進行初始化了雲存儲實例
private void initAGCStorageManagement() { mAGCStorageManagement = AGCStorageManagement.getInstance(); }
四、上傳文件:
須要先獲取到本地文件 ,以及這個文件的路徑,而後建立文件引用,對文件的進行上傳的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(); } }
五、下載文件:
須要先在本地設備中建立該文件,包括這個文件的路徑和文件名。而後建立一個雲端文件名稱的引用,對這個文件的引用的進行下載的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(); } }
六、刪除文件:
首先,先指定一個文件名爲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(); } }
Android Studio鏈接手機,而後將該安卓項目運行到手機上。
打開手機的文件管理器,找到 內部存儲/AGCSdk/ 路徑下,添加而且準備一個test.jpg文件。以下圖所示:
打開剛剛的應用,點擊Upload File 按鈕,查看上傳結果
此時AGC界面上,也能夠看到剛剛上傳的文件:
在應用內點擊下載按鈕,能夠看到界面顯示 下載成功。
此時回到文件管理器,能夠看到剛剛下載的文件。
點擊應用裏面的刪除按鈕,能夠看到應用界面上顯示刪除成功。
此時到AGC界面上確認下載結果,發現剛剛的test.jpg文件已經被刪除了
僅關注前端應用的開發,就能夠開發一個帶雲端存儲服務器的應用。不再用爲了服務器的搭建和運維擔憂,省時省力。並且還提供了相似於管理員模式的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