什么是菟盤(pán)?菟盤(pán)是由百度網(wǎng)盤(pán)開(kāi)放平臺(tái)提供的 API 開(kāi)發(fā)的一個(gè)百度網(wǎng)盤(pán)客戶端。主要提供網(wǎng)盤(pán)文件瀏覽,文件下載等。(100M 以下文件不限速,超過(guò) 100M 就是祖?zhèn)?100k/s了,支持會(huì)員加速)
百度網(wǎng)盤(pán)開(kāi)放平臺(tái):
https://pan.baidu.com/union/doc/
應(yīng)用主入口
本應(yīng)用主入口是 MainAbility,當(dāng)打開(kāi)應(yīng)用時(shí),會(huì)判斷用戶是否已登錄,未登錄會(huì)跳轉(zhuǎn)到登錄頁(yè)面,已登錄會(huì)跳轉(zhuǎn)到主頁(yè)。
登錄界面
登錄通過(guò) webview 來(lái)請(qǐng)求百度的 access_token:
接入流程文檔:
https://pan.baidu.com/union/doc/0ksg0sbig
這里需要注意一個(gè)細(xì)節(jié),官方文檔提供的授權(quán)地址是 PC 版的,需要改造一下,來(lái)適配手機(jī)頁(yè)面。
原理是先在百度 H5 端登錄,登錄完成后重定向至授權(quán)地址。
/*
百度應(yīng)用信息
*/
StringYOUR_CLIENT_ID="";//填自己的
StringYOUR_REGISTERED_REDIRECT_URI="https://dsttl3.cn/baiduapi.html";//需要和自己在百度網(wǎng)盤(pán)開(kāi)放平臺(tái)填寫(xiě)的相同,有個(gè)地址就行,不需要在服務(wù)器操作。當(dāng)然也可以在服務(wù)器請(qǐng)求token后直接返回。
StringYOUR_CLIENT_SECRET="";//填自己的
/**
*@return移動(dòng)端登錄授權(quán)鏈接
*/
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授權(quán)鏈接
*/
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 內(nèi)的操作:
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")){//這個(gè)鏈接是你所填寫(xiě)的YOUR_REGISTERED_REDIRECT_URI這里只寫(xiě)了開(kāi)頭,效果相同 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();//因?yàn)榈卿浲瓿珊鬅o(wú)需返回改界面,通過(guò)terminateAbility()方法銷(xiāo)毀該界面 } }); }catch(IOExceptione){ e.printStackTrace(); } } }).start(); returnfalse; } returnsuper.isNeedLoadUrl(webView,request); } }); webView.load(newAppUtils().getLoginUrl());//這里是上面轉(zhuǎn)換鏈接的方法
當(dāng)用戶完成登錄后,token 就保存到本地了。
主頁(yè)面
使用 ListContainer 來(lái)顯示文件列表:
代碼有點(diǎn)多,不在本文介紹了,可以參考 ListContainer 的相關(guān)文檔。
這里介紹一下防手滑操作,當(dāng)該應(yīng)用只有一個(gè)界面時(shí),一不小心返回,導(dǎo)致應(yīng)用直接退出,可以使用這個(gè)方法進(jìn)行一個(gè)提醒。
/**
*防止誤退出操作
*/
booleanexit=true;
@Override
publicbooleanonKeyDown(intkeyCode,KeyEventkeyEvent){
if(exit){
newToastDialog(getContext()).setText("再次返回退出程序").show();
exit=false;
newThread(newRunnable(){
@Override
publicvoidrun(){
Time.sleep(3000);//三秒內(nèi)再次返回退出程序
exit=true;
}
}).start();
returntrue;
}else{
returnfalse;
}
}
下載頁(yè)面
提供兩種下載方式,本地下載和 Aria2 下載:
解析處理的鏈接不能直接下載,必需要設(shè)置 User-Agent 字段為 pan.baidu.com 才能正常下載。
怎么獲取該應(yīng)用
①自己編譯,本文附件提供源碼
需要修改的地方:
包名:config.json 下的 bundleName和 cn.dsttl3.tupan 目錄下 MyApp.java 的 bundleName。不修改導(dǎo)致無(wú)法真機(jī)運(yùn)行和頁(yè)面跳轉(zhuǎn)失敗。
填寫(xiě)百度開(kāi)放平臺(tái)應(yīng)用信息:cn.dsttl3.tupan.utils 目錄下的 AppUtils.java:
/* 百度應(yīng)用信息 */ StringYOUR_CLIENT_ID="";//填自己的 StringYOUR_REGISTERED_REDIRECT_URI="https://dsttl3.cn/baiduapi.html";//需要和自己在百度網(wǎng)盤(pán)開(kāi)放平臺(tái)填寫(xiě)的相同,有個(gè)地址就行,不需要在服務(wù)器操作。當(dāng)然也可以在服務(wù)器請(qǐng)求token后直接返回。 StringYOUR_CLIENT_SECRET="";//填自己的
簽名文件:這個(gè)需要自己操作。
②下載測(cè)試版
不需要自己下載代碼進(jìn)行編譯,留言或私信華為賬號(hào),我會(huì)給你添加測(cè)試。然后通過(guò)華為官方發(fā)送的短信進(jìn)行下載。
https://harmonyos.51cto.com/posts/9636
原文標(biāo)題:HarmonyOS版百度網(wǎng)盤(pán)客戶端
文章出處:【微信公眾號(hào):HarmonyOS技術(shù)社區(qū)】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。
-
PC
+關(guān)注
關(guān)注
9文章
2162瀏覽量
158241 -
編譯
+關(guān)注
關(guān)注
0文章
682瀏覽量
34866 -
HarmonyOS
+關(guān)注
關(guān)注
80文章
2144瀏覽量
35225
原文標(biāo)題:HarmonyOS版百度網(wǎng)盤(pán)客戶端
文章出處:【微信號(hào):gh_834c4b3d87fe,微信公眾號(hào):OpenHarmony技術(shù)社區(qū)】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。
發(fā)布評(píng)論請(qǐng)先 登錄

HarmonyOS百度網(wǎng)盤(pán)客戶端可適配手機(jī)頁(yè)面
評(píng)論