介绍
什么是菟盘
菟盘,由百度网盘开放平台提供的API开发的一个百度网盘客户端。
主要提供网盘文件浏览,文件下载等。(100M以下文件不限速,超过100M就是祖传100k/s了,支持会员加速)
应用主入口
本应用主入口是MainAbility ,当打开应用时,会判断用户是否已登录,未登录会跳转到登录页面,已登录会跳转到主页。
登录界面
登录通过webview来请求百度的access_token

这里需要注意一个细节,官方文档提供的授权地址是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®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授权链接
*/
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来显示文件列表

代码有点多,不在本文介绍了,可以参考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下载

解析处理的链接不能直接下载,必需要设置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、下载测试版
不需要自己下载代码进行编译
留言或私信华为账号,我会给你添加测试。然后通过华为官方发送的短信进行下载。
文章相关附件可以点击下面的原文链接前往下载