Giter Site home page Giter Site logo

vdisksdk-android's Introduction

VdiskSDK-Android

关于微盘OPENAPI、SDK使用以及技术问题请联系: @俺是不是吐槽太多了 @王彤 @edgardo_赵鹏 @一个开发者 @Littlebox222

微盘Android SDK开发者交流群:240235926

微盘OpenAPI、全平台SDK交流群:134719337, 162285095

邮箱: [email protected]


运行示例代码

简要描述一下使用Eclipse运行Example的步骤:

  1. 请先前往 微盘开发者中心 注册为微盘开发者, 并创建应用;

  2. Clone或下载Github仓库中的VDiskSdk及VDiskSdk_Example两个工程,并导入Eclipse;

  3. 确保设置VDiskSdk为VDiskSdk_Example的依赖工程(Library);

  4. 进入工程VDiskSdk_Example/com.vdisk.android.example.OAuthActivity,根据应用信息修改常量CONSUMER_KEY(App Key),CONSUMER_SECRET(App Secret),REDIRECT_URL(应用回调地址);

  5. 编译并运行工程VDiskSdk_Example。


开发者常见问题FAQ(更新中)

Q:在开发者平台创建应用时,“回调地址”填什么?
A:应用回调地址对“移动客户端”应用来说对用户是不可见的,所以定义为何种形式都将不影响,但是没有定义将无法使用SDK认证登录。建议使用一个可访问的网址,例如 “ http://vdisk.weibo.com/ ”,并在代码中填入对应位置。“白名单”填写类似

Q:为何使用demo上传的文件在微盘官方网站看不到,也无法下载或查看官方网站上的文件和目录?
A:每个应用默认有属于自己的sandbox级的空间。经过特殊授权的应用可以使用basic级的公共空间。某应用自己的sandbox空间只能被本应用访问,其它应用都不能访问。用户空间隔离,申请basic权限请至“微盘开放平台-我的应用-申请basic访问权限”。

Q:SDK是否有重命名文件或目录的功能接口?
A:请使用SDK Example中的移动接口,通过传入带文件名的完整路径,达到重命名目的。

Q&A:如果您对SDK中提供的某个功能API不明确,可查看微盘 Open RESTful API文档


Usage

  • 认证相关

  • 实例化VDiskAuthSession
VDiskAuthSession session;
AppKeyPair appKeyPair = new AppKeyPair(CONSUMER_KEY, CONSUMER_SECRET);
session = VDiskAuthSession.getInstance(this,appKeyPair,AccessType.APP_FOLDER);
  • 使用新浪微博认证登录
WeiboAccessToken weiboToken = new WeiboAccessToken();
weiboToken.mAccessToken = OAuthActivity.WEIBO_ACCESS_TOKEN;
session.enabledAndSetWeiboAccessToken(weiboToken);
session.authorize(OAuthActivity.this, OAuthActivity.this);
  • 使用微盘认证登录
session.setRedirectUrl(REDIRECT_URL);
session.authorize(OAuthActivity.this, OAuthActivity.this);
  • 登陆认证的回调方法
/**
   * 认证结束后的回调方法
     * 
	 * Callback method after authentication.
	 */
	@Override
	public void onComplete(Bundle values) {

		if (values != null) {
			AccessToken mToken = (AccessToken) values
					.getSerializable(VDiskAuthSession.OAUTH2_TOKEN);
			session.finishAuthorize(mToken);
		}

		startActivity(new Intent(this, VDiskTestActivity.class));
		finish();
	}

	/**
	 * 认证出错的回调方法
	 * 
	 * Callback method for authentication errors.
	 */
	@Override
	public void onError(VDiskDialogError error) {
		Toast.makeText(getApplicationContext(),
				"Auth error : " + error.getMessage(), Toast.LENGTH_LONG).show();
	}

	/**
	 * 认证异常的回调方法
	 * 
	 * Callback method for authentication exceptions.
	 */
	@Override
	public void onVDiskException(VDiskException exception) {
		// TODO Auto-generated method stub
		Toast.makeText(getApplicationContext(),
				"Auth exception : " + exception.getMessage(), Toast.LENGTH_LONG)
				.show();
	}

	/**
	 * 认证被取消的回调方法
	 * 
	 * Callback method as authentication is canceled.
	 */
	@Override
	public void onCancel() {
		Toast.makeText(getApplicationContext(), "Auth cancel",
				Toast.LENGTH_LONG).show();
	}
  • 用户信息相关接口

  • 初始化VDiskAPI
VDiskAPI<VDiskAuthSession> mApi;
mApi = new VDiskAPI<VDiskAuthSession>(session);

Account account = mApi.accountInfo();
account.quota; //用户微盘总空间
Account.consumed; //用户微盘已使用空间
  • 上传下载模块

  • 小文件上传
UploadRequest mRequest;
mRequest = mApi.putFileOverwriteRequest(path, fis, mFile.length(),
  				new ProgressListener() {
						@Override
						public long progressInterval() {
							// 在这里设置进度更新间隔,缺省为0.5秒
							return super.progressInterval();
						}

						@Override
						public void onProgress(long bytes, long total) {
                        	// 在这里可以处理进度更新
 							// 参数bytes:当前已完成上传的字节数
 							// 参数total:总字节数
 							// 例如 publishProgress(bytes);
						}
					});
  • 大文件分段上传
ComplexUploadHandler handler = new ComplexUploadHandler(mContext) {
				@Override
				public void onProgress(long bytes, long total) {
					publishProgress(bytes);
				}

				@Override
				public void startedWithStatus(ComplexUploadStatus status) {
					switch (status) {
					case ComplexUploadStatusLocateHost:
						Log.d(TAG, "Getting the nearest host...");
						break;
					case ComplexUploadStatusCreateFileSHA1:
						Log.d(TAG, "Creating the sha1 of file");
						break;
					case ComplexUploadStatusInitialize:
						Log.d(TAG, "Signing each segment of file...");
						break;
					case ComplexUploadStatusCreateFileMD5s:
						Log.d(TAG, "Creating each segment's md5...");
						break;
					case ComplexUploadStatusUploading:
						Log.d(TAG, "Uploading one segment...");
						break;
					case ComplexUploadStatusMerging:
						Log.d(TAG, "File Merging...");
						break;
					default:
						break;
					}
				}

				@Override
				public void finishedWithMetadata(Entry metadata) {
					Log.d(TAG, "Upload success : " + metadata.fileName());
				}
			};

			mApi.putLargeFileOverwriteRequest(mSrcPath, desPath,
					mFile.length(), handler);
  • 文件下载
File file = mApi.createDownloadDirFile(mTargetPath);
try {
  mFos = new FileOutputStream(file, true);
	} catch (FileNotFoundException e) {
	mErrorMsg = "Couldn't create a local file to store the file";
	return false;
}

VDiskFileInfo info = mApi.getFile(mPath, null, mFos, file,
  				new ProgressListener() {

						@Override
						public long progressInterval() {
 							// 在这里设置进度更新间隔,缺省为0.5秒
							return super.progressInterval();
						}

						@Override
						public void onProgress(long bytes, long total) {
 						// 在这里可以处理进度更新
 						// 参数bytes:当前已完成下载的字节数
 						// 参数total:总字节数
 						// 例如
 								mFileLen = total;
 								publishProgress(bytes);
						}
					});
  • 文件、目录操作相关接口

  • 下载缩略图
mApi.getThumbnail(path, mFos, ThumbSize.ICON_640x480, null);
  • 获取文件夹下的目录信息
Entry metadata = mApi.metadata(path, null, true, false);
List<Entry> contents = metadata.contents;
  • 获取文件详细信息
Entry metadata = mApi.metadata(path, null, true, false);
metadata.fileName();// 文件名
metadata.size; // 文件大小
metadata.modified; //	文件修改时间
metadata.path;	//文件微盘路径
  • 获取文件的历史版本
List<Entry> contents = mApi.revisions(path, -1);
  • 搜索
List<Entry> result = mApi.search("/", keyword, -1, false);
  • 获取文件的下载链接
VDiskLink media = mApi.media(path, false);
media.url; // 文件的下载地址
media.expires; //  下载地址的过期时间
  • 获取用户文件和目录的操作变化记录
DeltaPage<Entry> deltaPage = mApi.delta(cursor);
  • 文件编辑相关接口

  • 复制
Entry metadata = mApi.copy(fromPath, toPath);
  • 新建文件夹
Entry metaData = mApi.createFolder(path);
  • 删除
Entry metaData = mApi.delete(path);
  • 移动
Entry metadata = mApi.move(fromPath, toPath);
  • 还原
Entry metadata = mApi.restore(path, revision);
  • 分享相关接口

  • 分享
String shareLink = mApi.share(path);
  • 取消分享
Entry metaData = mApi.cancelShare(path);
  • 创建拷贝引用
CreatedCopyRef createCopyRef = mApi.createCopyRef(sourcePath);
  • 通过拷贝引用保存到微盘
Entry entry = mApi.addFromCopyRef(sourceCopyRef, targetPath);
  • 根据拷贝引用获取下载链接
VDiskLink link = mApi.getLinkByCopyRef(sourceCopyRef);

vdisksdk-android's People

Contributors

yinkai1205 avatar tongcpp avatar cloudside avatar qhm123 avatar

Stargazers

David Joseph, Founder @ iA Labs avatar  avatar  avatar  avatar Felix.Zhong avatar  avatar Daniel Shi avatar  avatar  avatar  avatar  avatar Timmmm avatar  avatar  avatar  avatar ouyang avatar  avatar young-public avatar  avatar  avatar chenjun avatar  avatar roadlabs avatar Eleven Chen avatar luck avatar samuelwang avatar Jason avatar Kevin Yao avatar  avatar 平江 avatar WD avatar abcd avatar Jick Nan avatar  avatar Itsuki Hayashi avatar  avatar  avatar  avatar

Watchers

roadlabs avatar  avatar william avatar James Cloos avatar zhouwei@1 avatar  avatar  avatar  avatar edgardo avatar  avatar  avatar Randy avatar  avatar Yanzw avatar

vdisksdk-android's Issues

Example导入Android studio报错,请问怎么解决?

编辑器:as2.1.1
gradle:
`apply plugin: 'com.android.application'

android {
compileSdkVersion 14
buildToolsVersion "23.0.2"

defaultConfig {
    applicationId "com.vdisk.android.example"
    minSdkVersion 9
    targetSdkVersion 23
}

buildTypes {
    release {
        minifyEnabled false
        proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.txt'
    }
}

}

dependencies {
compile project(':vDiskSdk')
compile files('libs/json_simple-1.1.jar')
compile files('libs/weibosdkcore.jar')
}报错:Error:Error converting bytecode to dex:
Cause: com.android.dex.DexException: Multiple dex files define Lorg/json/simple/ItemList; :vDiskSdk_Example:transformClassesWithDexForDebug FAILED Error:Execution failed for task ':vDiskSdk_Example:transformClassesWithDexForDebug'.

com.android.build.api.transform.TransformException: com.android.ide.common.process.ProcessException: java.util.concurrent.ExecutionException: com.android.ide.common.process.ProcessException: org.gradle.process.internal.ExecException: Process 'command 'C:\Program Files\Java\jdk1.8.0_73\bin\java.exe'' finished with non-zero exit value 2`
请问怎么解决?

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.