Android调用优酷SDK实现上传视频到优酷

来源:互联网 发布:网络电视机顶盒哪个好 编辑:程序博客网 时间:2024/06/08 14:21
程序实现前我们先要到优酷开放平台下载SDK(下载地址:http://open.youku.com/down),下载好后我们将压缩包解压,下面以Eclipse为开发工具进行讲解:
首先我们要获得优酷sdk的jar包,将解压好的YoukuUploadSDK-android工程导入到Eclipse中,展开该工程目录下的libs将里面的android-async-http-1.4.3.jar包复制到我们自己工程的libs目录下,然后将导入的优酷工程导出,选择Java下的JAR file 
-->展开工程将res文件和右侧窗口不需要的文件去掉并选择到处路径和文件名然后点finish,将获得的jar包拷贝到我们自己的工程libs目录下,一般程序会自动Baidu Path,若没有我们可以自己选择相应jar包右键-->Baidu Path-->add to Path,这样所需要的jar包准备完成!

根据优酷SDK的说明,上传过程主要分为以下7个步骤:

1. 新建android项目,引入YoukuUploadSDK-android jar

2. MainActivity.java文件添加代码如sample.java所示,添加相关参数

3. 文件夹layoutactivity_main.xml添加控件

4. 生成代码(xml文件代码)

5. 连接android手机运行android项目生成apk(切记开启开发者选项usb调试等)

6. 授权过程(获取access_token)

7. 点击upload上传


其中第一步我们前面已经说明了,第2-5及7个步骤只要按着它api文档中写的来做一般也不会有问题,这里重点说明下第六步的授权过程,本人也是在第六部上卡住通过不断阅读它提供的文档及互联网查找资料才最终解决,这里写下来方便以后回顾使用,同时也希望能帮助有需要的小伙伴们,废话不多说,下面先说说我的理解过程然后再附上我的实现过程供小伙伴们参考:


通过阅读优酷提供的关于授权机制这块的文档(http://open.youku.com/docs/OAuth2.html),其实也是比较容易理解的,可能本人刚学Android不久,所以理解得慢了点让大家见笑了。



从图中可以看出我们的项目在上传时需要首先跳转到授权页面来获取授权码,这里我使用一个WebView来显示授权页面,然后,我们可以通过使用授权码来交换令牌即所谓的access_token,最后通过access_token来获取上传的权限,这就是总体的思路,下面来分步详细说明:


首先我们通过一个WebView来显示授权页面获取授权码根据优酷文档的说明(http://open.youku.com/docs/api_oauth_code.html)我们需要使用http方法get的方式来获取授权码,所需参数及说明请各位小伙伴查看上面的文档哈,这里就不赘述了,下面看代码:

import android.content.Intent;
import android.os.Bundle;
import android.webkit.WebView;
import android.webkit.WebViewClient;
import com.feimo.mgrechelper.tools.BaseActivity;
public class GetCodeActivity extends BaseActivity {
    private WebView webview;
    private String strCode;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        // TODO Auto-generated method stub
        super.onCreate(savedInstanceState);
        webview = new WebView(this);
//下面这个链接大家可以在优酷的文档中找到我们其实只要把client_id及redirect_uri后面的值换成我们申请优酷开发者帐号时优酷提供的及我们设置的回调地址就可以  
        webview.loadUrl("https://openapi.youku.com/v2/oauth2/authorize?client_id=8afc1bdf9487f339&response_type=code&redirect_uri=http://42.96.184.124/youku.html&state=xyz");
        setContentView(webview);      // 设置Web视图
        webview.setWebViewClient(new WebViewClient() {
            @Override
            public boolean shouldOverrideUrlLoading(WebView view, String url) {
                // TODO Auto-generated method stub
                view.loadUrl(url);
                String[] str = null;
                str = url.split("=")[1].split("&");
                strCode = str[0];
                Intent it = new Intent();
                it.putExtra("code"strCode);
                it.setClass(GetCodeActivity.this, UploadActivity.class);
                startActivity(it);
                return false;
            }
        });
    }
}  


上面的代码中我们通过WebView.setWebViewClient使WebView不调用手机浏览器跳转而是留在当前页显示,这样我们就可以通过实现shouldOverrideUrlLoading(WebView view, String url)方法,通过对方法中url进行解析来获取code码,获得code码后,接下来我们来看下怎么获取access_token码:


首先从优酷api文档我们可以知道,它需要我们通过http的post方法来请求数据,并且返回的是一个json格式的数据,前面我们已经获得了code码,至于其它需要的参数都是我们注册时优酷提供的,下面我们来看下具体的实现:


private String getToken() {
        // TODO Auto-generated method stub
        String strUrl = "https://openapi.youku.com/v2/oauth2/token";
        HttpPost httpPost = new HttpPost(strUrl);
        List<NameValuePair> params = new ArrayList<NameValuePair>();
        params.add(new BasicNameValuePair("client_id"client_id));
        params.add(new BasicNameValuePair("client_secret"client_secret));
        params.add(new BasicNameValuePair("grant_type"grant_type));
        params.add(new BasicNameValuePair("code"code));
        params.add(new BasicNameValuePair("redirect_uri"redirect_uri));
        HttpResponse httpResponse = null;
        try {
            httpPost.setEntity(new UrlEncodedFormEntity(params, HTTP.UTF_8));
            httpResponse = new DefaultHttpClient().execute(httpPost);
            if (httpResponse.getStatusLine().getStatusCode() == 200) {
                String result = EntityUtils.toString(httpResponse.getEntity());
                System.out.println(result);
                JSONObject object = new JSONObject(result);
                access_token = object.getString("access_token");
                editor.putString("access_token"access_token);
                return access_token;
            }
        } catch (Exception e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
        return null;
    }  


通过上述方法,我们可以很简单地获取优酷上传视频所需要的access_token,是不是很简单呢?既然我们已经获取了access_token,我们就可以在前面第2步创建的MainActivity.java中将access_token设置到params的参数中,这样我们就能实现上传视频到优酷了!

第一次写博客,希望能给各位同是Android新人的麻油一点帮助,代码不足之处还望大家见谅!也欢迎各位多多批评指教!

1 0