菟盘 - 鸿蒙版百度网盘客户端

菟盘,由百度网盘开放平台提供的API开发的一个百度网盘客户端。主要提供网盘文件浏览,文件下载等。(1
首页 新闻资讯 行业资讯 菟盘 - 鸿蒙版百度网盘客户端

[[440624]]

想了解更多内容,请访问:

51CTO和华为官方合作共建的鸿蒙技术社区

https://harmonyos.51cto.com

介绍

什么是菟盘

菟盘,由百度网盘开放平台提供的API开发的一个百度网盘客户端。

主要提供网盘文件浏览,文件下载等。(100M以下文件不限速,超过100M就是祖传100k/s了,支持会员加速)

👉百度网盘开放平台

应用主入口

本应用主入口是MainAbility ,当打开应用时,会判断用户是否已登录,未登录会跳转到登录页面,已登录会跳转到主页。

登录界面

登录通过webview来请求百度的access_token

#星光计划2.0# 菟盘 - 鸿蒙版百度网盘客户端-鸿蒙HarmonyOS技术社区

接入流程文档

这里需要注意一个细节,官方文档提供的授权地址是PC版的,需要改造一下,来适配手机页面。

原理是先在百度H5端登录,登录完成后重定向至授权地址。

复制

/*     百度应用信息      */     String YOUR_CLIENT_ID = ""; //填自己的     String YOUR_REGISTERED_REDIRECT_URI = "https://dsttl3.cn/baiduapi.html"; //需要和自己在百度网盘开放平台填写的相同,有个地址就行,不需要在服务器操作。当然也可以在服务器请求token后直接返回。     String YOUR_CLIENT_SECRET = ""; //填自己的      /**      * @return 移动端登录授权链接      */      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&regtype=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授权链接      */      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;     }
  • 1.

  • 2.

  • 3.

  • 4.

  • 5.

  • 6.

  • 7.

  • 8.

  • 9.

  • 10.

  • 11.

  • 12.

  • 13.

  • 14.

  • 15.

  • 16.

  • 17.

  • 18.

  • 19.

  • 20.

  • 21.

  • 22.

  • 23.

  • 24.

  • 25.

  • 26.

  • 27.

  • 28.

  • 29.

  • 30.

  • 31.

  • 32.

  • 33.

  • 34.

  • 35.

  • 36.

  • 37.

  • 38.

  • 39.

  • 40.

webview内的操作

复制

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()); // 这里是上面转换链接的方法
  • 1.

  • 2.

  • 3.

  • 4.

  • 5.

  • 6.

  • 7.

  • 8.

  • 9.

  • 10.

  • 11.

  • 12.

  • 13.

  • 14.

  • 15.

  • 16.

  • 17.

  • 18.

  • 19.

  • 20.

  • 21.

  • 22.

  • 23.

  • 24.

  • 25.

  • 26.

  • 27.

  • 28.

  • 29.

  • 30.

  • 31.

  • 32.

  • 33.

  • 34.

  • 35.

  • 36.

  • 37.

  • 38.

  • 39.

  • 40.

  • 41.

  • 42.

  • 43.

  • 44.

  • 45.

  • 46.

  • 47.

当用户完成登录后,token就保存到本地了。

主页面

使用ListContainer来显示文件列表

#星光计划2.0# 菟盘 - 鸿蒙版百度网盘客户端-鸿蒙HarmonyOS技术社区

代码有点多,不在本文介绍了,可以参考ListContainer的相关文档

这里介绍一下防手滑操作

当该应用只有一个界面时,一不小心返回,导致应用直接退出,可以使用这个方法进行一个提醒。

复制

/**      * 防止误退出操作      */     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);//三秒内再次返回退出程序                     exit=true;                 }             }).start();             return true;         }else {             return false;         }     }
  • 1.

  • 2.

  • 3.

  • 4.

  • 5.

  • 6.

  • 7.

  • 8.

  • 9.

  • 10.

  • 11.

  • 12.

  • 13.

  • 14.

  • 15.

  • 16.

  • 17.

  • 18.

  • 19.

  • 20.

  • 21.

下载页面

提供两种下载方式,本地下载和Aria2下载

#星光计划2.0# 菟盘 - 鸿蒙版百度网盘客户端-鸿蒙HarmonyOS技术社区

解析处理的链接不能直接下载,必需要设置User-Agent字段为pan.baidu.com才能正常下载

怎么获取该应用

1、自己编译,本文附件提供源码

需要修改的地方

  •  包名

config.json  下的bundleName,和cn.dsttl3.tupan目录下MyApp.java的bundleName。不修改导致无法真机运行和页面跳转失败

  • 填写百度开放平台应用信息

cn.dsttl3.tupan.utils 目录下的 AppUtils.java

复制

/*     百度应用信息      */     String YOUR_CLIENT_ID = ""; //填自己的     String YOUR_REGISTERED_REDIRECT_URI = "https://dsttl3.cn/baiduapi.html"; //需要和自己在百度网盘开放平台填写的相同,有个地址就行,不需要在服务器操作。当然也可以在服务器请求token后直接返回。     String YOUR_CLIENT_SECRET = ""; //填自己的
  • 1.

  • 2.

  • 3.

  • 4.

  • 5.

  • 6.

  签名文件

  • 这个需要自己操作

2、下载测试版

不需要自己下载代码进行编译

留言或私信华为账号,我会给你添加测试。然后通过华为官方发送的短信进行下载。

文章相关附件可以点击下面的原文链接前往下载

https://harmonyos.51cto.com/resource/1586

想了解更多内容,请访问:

51CTO和华为官方合作共建的鸿蒙技术社区

https://harmonyos.51cto.com

14    2021-12-16 10:08:47    鸿蒙 HarmonyOS 应用