什么是菟盘?菟盘是由百度网盘开放平台提供的 API 开发的一个百度网盘客户端。主要提供网盘文件浏览,文件下载等。(100M 以下文件不限速,超过 100M 就是祖传 100k/s了,支持会员加速)
百度网盘开放平台:
https://pan.baidu.com/union/doc/
应用主入口
本应用主入口是 MainAbility,当打开应用时,会判断用户是否已登录,未登录会跳转到登录页面,已登录会跳转到主页。
登录界面
登录通过 webview 来请求百度的 access_token:
接入流程文档:
https://pan.baidu.com/union/doc/0ksg0sbig
这里需要注意一个细节,官方文档提供的授权地址是 PC 版的,需要改造一下,来适配手机页面。
原理是先在百度 H5 端登录,登录完成后重定向至授权地址。
/* 百度应用信息 */ StringYOUR_CLIENT_ID="";//填自己的 StringYOUR_REGISTERED_REDIRECT_URI="https://dsttl3.cn/baiduapi.html";//需要和自己在百度网盘开放平台填写的相同,有个地址就行,不需要在服务器操作。当然也可以在服务器请求token后直接返回。 StringYOUR_CLIENT_SECRET="";//填自己的 /** *@return移动端登录授权链接 */ publicStringgetLoginUrl(){ Stringurl="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"; returnurl; }catch(UnsupportedEncodingExceptione){ e.printStackTrace(); returnnull; } } /** *@returnAccess_token授权链接 */ publicStringgetAccessTokenUrl(StringCODE){ 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 内的操作:
WebViewwebView=(WebView)findComponentById(ResourceTable.Id_login_wv); webView.getWebConfig().setJavaScriptPermit(true); webView.setWebAgent(newWebAgent(){ @Override publicbooleanisNeedLoadUrl(WebViewwebView,ResourceRequestrequest){ if(request.getRequestUrl().toString().startsWith("https://dsttl3.cn")){//这个链接是你所填写的YOUR_REGISTERED_REDIRECT_URI这里只写了开头,效果相同 Stringcode=request.getRequestUrl().toString().split("code=")[1]; StringAccess_token_url=newAppUtils().getAccessTokenUrl(code); newThread(newRunnable(){ @Override publicvoidrun(){ try{ OkHttpClientclient=newOkHttpClient(); Requestrequest=newRequest.Builder().url(Access_token_url) .header("User-Agent","pan.baidu.com") .build(); Callcall=client.newCall(request); StringaccessTokenJson=call.execute().body().string(); AccessTokenaccessToken=newGson().fromJson(accessTokenJson,AccessToken.class); System.out.println(accessToken.getAccess_token()); getUITaskDispatcher().asyncDispatch(newRunnable(){ @Override publicvoidrun(){ Preferencespreferences=newDataUtils().getPreferences(getApplicationContext()); preferences.putString("token",accessToken.getAccess_token()); preferences.flush(); Intentintent1=newIntent(); Operationoperation=newIntent.OperationBuilder() .withBundleName(MyApp.bundleName) .withAbilityName("cn.dsttl3.tupan.Ability.IndexAbility") .build(); intent1.setOperation(operation); startAbility(intent1); terminateAbility();//因为登录完成后无需返回改界面,通过terminateAbility()方法销毁该界面 } }); }catch(IOExceptione){ e.printStackTrace(); } } }).start(); returnfalse; } returnsuper.isNeedLoadUrl(webView,request); } }); webView.load(newAppUtils().getLoginUrl());//这里是上面转换链接的方法
当用户完成登录后,token 就保存到本地了。
主页面
使用 ListContainer 来显示文件列表:
代码有点多,不在本文介绍了,可以参考 ListContainer 的相关文档。
这里介绍一下防手滑操作,当该应用只有一个界面时,一不小心返回,导致应用直接退出,可以使用这个方法进行一个提醒。
/** *防止误退出操作 */ booleanexit=true; @Override publicbooleanonKeyDown(intkeyCode,KeyEventkeyEvent){ if(exit){ newToastDialog(getContext()).setText("再次返回退出程序").show(); exit=false; newThread(newRunnable(){ @Override publicvoidrun(){ Time.sleep(3000);//三秒内再次返回退出程序 exit=true; } }).start(); returntrue; }else{ returnfalse; } }
下载页面
提供两种下载方式,本地下载和 Aria2 下载:
解析处理的链接不能直接下载,必需要设置 User-Agent 字段为 pan.baidu.com 才能正常下载。
怎么获取该应用
①自己编译,本文附件提供源码
需要修改的地方:
包名:config.json 下的 bundleName和 cn.dsttl3.tupan 目录下 MyApp.java 的 bundleName。不修改导致无法真机运行和页面跳转失败。
填写百度开放平台应用信息:cn.dsttl3.tupan.utils 目录下的 AppUtils.java:
/* 百度应用信息 */ StringYOUR_CLIENT_ID="";//填自己的 StringYOUR_REGISTERED_REDIRECT_URI="https://dsttl3.cn/baiduapi.html";//需要和自己在百度网盘开放平台填写的相同,有个地址就行,不需要在服务器操作。当然也可以在服务器请求token后直接返回。 StringYOUR_CLIENT_SECRET="";//填自己的
签名文件:这个需要自己操作。
②下载测试版
不需要自己下载代码进行编译,留言或私信华为账号,我会给你添加测试。然后通过华为官方发送的短信进行下载。
https://harmonyos.51cto.com/posts/9636
原文标题:HarmonyOS版百度网盘客户端
文章出处:【微信公众号:HarmonyOS技术社区】欢迎添加关注!文章转载请注明出处。
-
PC
+关注
关注
9文章
2065浏览量
154007 -
编译
+关注
关注
0文章
653浏览量
32803 -
HarmonyOS
+关注
关注
79文章
1967浏览量
30005
原文标题:HarmonyOS版百度网盘客户端
文章出处:【微信号:gh_834c4b3d87fe,微信公众号:OpenHarmony技术社区】欢迎添加关注!文章转载请注明出处。
发布评论请先 登录
相关推荐
评论