菟盤 - 鴻蒙版百度網(wǎng)盤客戶端
51CTO和華為官方合作共建的鴻蒙技術(shù)社區(qū)
介紹
什么是菟盤
菟盤,由百度網(wǎng)盤開放平臺提供的API開發(fā)的一個百度網(wǎng)盤客戶端。
主要提供網(wǎng)盤文件瀏覽,文件下載等。(100M以下文件不限速,超過100M就是祖?zhèn)?00k/s了,支持會員加速)
應(yīng)用主入口
本應(yīng)用主入口是MainAbility ,當(dāng)打開應(yīng)用時,會判斷用戶是否已登錄,未登錄會跳轉(zhuǎn)到登錄頁面,已登錄會跳轉(zhuǎn)到主頁。
登錄界面
登錄通過webview來請求百度的access_token

這里需要注意一個細(xì)節(jié),官方文檔提供的授權(quán)地址是PC版的,需要改造一下,來適配手機頁面。
原理是先在百度H5端登錄,登錄完成后重定向至授權(quán)地址。
- /*
- 百度應(yīng)用信息
- */
- String YOUR_CLIENT_ID = ""; //填自己的
- String YOUR_REGISTERED_REDIRECT_URI = "https://dsttl3.cn/baiduapi.html"; //需要和自己在百度網(wǎng)盤開放平臺填寫的相同,有個地址就行,不需要在服務(wù)器操作。當(dāng)然也可以在服務(wù)器請求token后直接返回。
- String YOUR_CLIENT_SECRET = ""; //填自己的
- /**
- * @return 移動端登錄授權(quán)鏈接
- */
- public String getLoginUrl(){
- String url = "https://openapi.baidu.com/oauth/2.0/authorize?response_type=code" +
- "&client_id=" +YOUR_CLIENT_ID +
- "&redirect_uri=" + YOUR_REGISTERED_REDIRECT_URI +
- "&scope=basic,netdisk&force_login=0";
- try {
- url = URLEncoder.encode(url,"UTF-8");
- url = "https://wappass.baidu.com/passport/?login&tpl=wimn&sms=1®type=1&u=" +
- url +
- "&extrajson=%7b%22src%22%3a%22se_000000%22%7d#/password_login";
- return url;
- } catch (UnsupportedEncodingException e) {
- e.printStackTrace();
- return null;
- }
- }
- /**
- * @return Access_token授權(quán)鏈接
- */
- public String getAccessTokenUrl(String CODE){
- return "https://openapi.baidu.com/oauth/2.0/token?grant_type=authorization_code" +
- "&code=" + CODE +
- "&client_id=" + YOUR_CLIENT_ID +
- "&client_secret=" + YOUR_CLIENT_SECRET +
- "&redirect_uri=" + YOUR_REGISTERED_REDIRECT_URI;
- }
webview內(nèi)的操作
- WebView webView = (WebView) findComponentById(ResourceTable.Id_login_wv);
- webView.getWebConfig().setJavaScriptPermit(true);
- webView.setWebAgent(new WebAgent(){
- @Override
- public boolean isNeedLoadUrl(WebView webView, ResourceRequest request) {
- if (request.getRequestUrl().toString().startsWith("https://dsttl3.cn")){ // 這個鏈接是你所填寫的 YOUR_REGISTERED_REDIRECT_URI 這里只寫了開頭,效果相同
- String code = request.getRequestUrl().toString().split("code=")[1];
- String Access_token_url = new AppUtils().getAccessTokenUrl(code);
- new Thread(new Runnable() {
- @Override
- public void run() {
- try {
- OkHttpClient client = new OkHttpClient();
- Request request = new Request.Builder().url(Access_token_url)
- .header("User-Agent","pan.baidu.com")
- .build();
- Call call = client.newCall(request);
- String accessTokenJson = call.execute().body().string();
- AccessToken accessToken = new Gson().fromJson(accessTokenJson, AccessToken.class);
- System.out.println(accessToken.getAccess_token());
- getUITaskDispatcher().asyncDispatch(new Runnable() {
- @Override
- public void run() {
- Preferences preferences = new DataUtils().getPreferences(getApplicationContext());
- preferences.putString("token",accessToken.getAccess_token());
- preferences.flush();
- Intent intent1 = new Intent();
- Operation operation = new Intent.OperationBuilder()
- .withBundleName(MyApp.bundleName)
- .withAbilityName("cn.dsttl3.tupan.Ability.IndexAbility")
- .build();
- intent1.setOperation(operation);
- startAbility(intent1);
- terminateAbility(); //因為登錄完成后無需返回改界面,通過 terminateAbility() 方法銷毀該界面
- }
- });
- } catch (IOException e) {
- e.printStackTrace();
- }
- }
- }).start();
- return false;
- }
- return super.isNeedLoadUrl(webView, request);
- }
- });
- webView.load(new AppUtils().getLoginUrl()); // 這里是上面轉(zhuǎn)換鏈接的方法
當(dāng)用戶完成登錄后,token就保存到本地了。
主頁面
使用ListContainer來顯示文件列表

代碼有點多,不在本文介紹了,可以參考ListContainer的相關(guān)文檔
這里介紹一下防手滑操作
當(dāng)該應(yīng)用只有一個界面時,一不小心返回,導(dǎo)致應(yīng)用直接退出,可以使用這個方法進(jìn)行一個提醒。
- /**
- * 防止誤退出操作
- */
- boolean exit = true;
- @Override
- public boolean onKeyDown(int keyCode, KeyEvent keyEvent) {
- if (exit){
- new ToastDialog(getContext()).setText("再次返回退出程序").show();
- exit = false;
- new Thread(new Runnable() {
- @Override
- public void run() {
- Time.sleep(3000);//三秒內(nèi)再次返回退出程序
- exit=true;
- }
- }).start();
- return true;
- }else {
- return false;
- }
- }
下載頁面
提供兩種下載方式,本地下載和Aria2下載

解析處理的鏈接不能直接下載,必需要設(shè)置User-Agent字段為pan.baidu.com才能正常下載
怎么獲取該應(yīng)用
1、自己編譯,本文附件提供源碼
需要修改的地方
- 包名
config.json 下的bundleName,和cn.dsttl3.tupan目錄下MyApp.java的bundleName。不修改導(dǎo)致無法真機運行和頁面跳轉(zhuǎn)失敗
- 填寫百度開放平臺應(yīng)用信息
cn.dsttl3.tupan.utils 目錄下的 AppUtils.java
- /*
- 百度應(yīng)用信息
- */
- String YOUR_CLIENT_ID = ""; //填自己的
- String YOUR_REGISTERED_REDIRECT_URI = "https://dsttl3.cn/baiduapi.html"; //需要和自己在百度網(wǎng)盤開放平臺填寫的相同,有個地址就行,不需要在服務(wù)器操作。當(dāng)然也可以在服務(wù)器請求token后直接返回。
- String YOUR_CLIENT_SECRET = ""; //填自己的
簽名文件
- 這個需要自己操作
2、下載測試版
不需要自己下載代碼進(jìn)行編譯
留言或私信華為賬號,我會給你添加測試。然后通過華為官方發(fā)送的短信進(jìn)行下載。
文章相關(guān)附件可以點擊下面的原文鏈接前往下載
https://harmonyos.51cto.com/resource/1586