1.在这里上传视频到服务器用的是xutils3.0,当然大家也可以用okhttp进行操作.
第一步:我们就是要从我们app的视频列表,进入我们查询本地视频的那个activity,代码如下:

 Intent i = new Intent(SelectVideoActivity.this, GetVideoActivity.class);startActivityForResult(i, REQUEST_CODE);

这里用startActivityForResult是为了获取返回选中的本地视频的信息.

第二步:在GetVideoActivity里面查询本地所有视频,并将查询到的视频显示在我们GetVideoActivity的页面上,代码如下:

GetVideoActivity的xml布局代码:

  <ListView>android:id="@+id/lv_video"android:layout_width="match_parent"android:layout_height="match_parent"<ListView/>

GetVideoActivity中的代码:

public class GetVideoActivity extends Activity {private ListView lv;Context mContext;private VideodetailAdapter adapter;private List<BitmapEntity> bit = new ArrayList<BitmapEntity>();@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_get);lv = (ListView) findViewById(R.id.lv_video);mContext = this;new Search_photo().start();}private Handler mHandler = new Handler() {@SuppressLint("ShowToast")public void handleMessage(android.os.Message msg) {if (msg.what == 1&&bit!=null) {adapter = new VideodetailAdapter(mContext, bit);Toast.makeText(mContext, "视频总数:" + bit.size(), Toast.LENGTH_SHORT).show();lv.setAdapter(adapter);lv.setOnItemClickListener(new AdapterView.OnItemClickListener() {@Overridepublic void onItemClick(AdapterView<?> arg0, View arg1, int arg2, long arg3) {if(bit.size()!=0){Intent intent = new Intent();
//                            String type = "video/mp4";
//                            Uri uri = Uri.parse("file://"+bit.get(arg2).getUri());
//                            intent.setDataAndType(uri, type);
//                            startActivity(intent);String uri = bit.get(arg2).getUri();intent.putExtra("url",bit.get(arg2).getUri());Log.e("url_ssss", bit.get(arg2).getUri());setResult(RESULT_OK, intent);finish();}}});}};};/**** 遍历系统数据库找出相应的是视频的信息,每找出一条视频信息的同时利用与之关联的找出对应缩略图的uri   * 再异步加载缩略图,* 由于查询速度非常快,全部查找完成在设置,等待时间不会太长* @author Administrator**/class Search_photo extends Thread {@Overridepublic void run() {// 如果有sd卡(外部存储卡)if (android.os.Environment.getExternalStorageState().equals(android.os.Environment.MEDIA_MOUNTED)) {Uri originalUri = MediaStore.Video.Media.EXTERNAL_CONTENT_URI;ContentResolver cr = mContext.getApplicationContext().getContentResolver();Cursor cursor = cr.query(originalUri, null, null, null, null);if (cursor == null) {return;}for (cursor.moveToFirst(); !cursor.isAfterLast(); cursor.moveToNext()) {String title = cursor.getString(cursor.getColumnIndexOrThrow(MediaStore.Video.Media.TITLE));String path = cursor.getString(cursor.getColumnIndexOrThrow(MediaStore.Video.Media.DATA));long size = cursor.getLong(cursor.getColumnIndexOrThrow(MediaStore.Video.Media.SIZE));long duration = cursor.getInt(cursor.getColumnIndexOrThrow(MediaStore.Video.Media.DURATION));//获取当前Video对应的Id,然后根据该ID获取其缩略图的uri  int id = cursor.getInt(cursor.getColumnIndexOrThrow(MediaStore.Video.Media._ID));String[] selectionArgs = new String[] { id + "" };String[] thumbColumns = new String[] { MediaStore.Video.Thumbnails.DATA,MediaStore.Video.Thumbnails.VIDEO_ID };String selection = MediaStore.Video.Thumbnails.VIDEO_ID + "=?";String uri_thumb = "";Cursor thumbCursor = (mContext.getApplicationContext().getContentResolver()).query(MediaStore.Video.Thumbnails.EXTERNAL_CONTENT_URI, thumbColumns, selection, selectionArgs,null);if (thumbCursor != null && thumbCursor.moveToFirst()) {uri_thumb = thumbCursor.getString(thumbCursor.getColumnIndexOrThrow(MediaStore.Video.Thumbnails.DATA));}BitmapEntity bitmapEntity = new BitmapEntity(title, path, size, uri_thumb, duration);bit.add(bitmapEntity);}if (cursor != null) {cursor.close();mHandler.sendEmptyMessage(1);}}}}
}

第三步:ListView视频列表VideodetailAdapter的item的布局文件代码如下:

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"android:layout_width="match_parent"android:layout_height="match_parent"android:paddingTop="5dp"xmlns:app="http://schemas.android.com/apk/res-auto"android:orientation="vertical"><ImageViewandroid:id="@+id/imgv"android:layout_alignParentLeft="true"android:layout_marginLeft="15dp"android:layout_width="120dp"android:layout_height="90dp"android:scaleType="fitXY"android:src="@mipmap/icon_video"/><TextViewandroid:id="@+id/tv"android:layout_toRightOf="@+id/imgv"android:layout_width="wrap_content"android:layout_height="wrap_content"android:text="this is titile"android:textSize="16sp"android:layout_marginLeft="12dp"/><TextViewandroid:id="@+id/video_size"android:layout_below="@+id/tv"android:layout_toRightOf="@+id/imgv"android:layout_marginBottom="5dp"android:layout_marginLeft="12dp"android:layout_width="wrap_content"android:layout_height="wrap_content"android:text="--"android:textSize="12sp"/><TextViewandroid:id="@+id/video_time_long"android:layout_below="@+id/tv"android:layout_alignParentRight="true"android:layout_marginRight="15dp"android:layout_marginBottom="5dp"android:layout_width="wrap_content"android:layout_height="wrap_content"android:text="--"android:textSize="12sp"/>
</RelativeLayout>

第四步:适配器VideodetailAdapter的代码:

import android.annotation.SuppressLint;
import android.content.Context;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.ImageView;
import android.widget.TextView;import com.nostra13.universalimageloader.core.ImageLoader;import java.util.ArrayList;
import java.util.List;import teacher.arriga.com.arrigateacher.R;
import teacher.arriga.com.arrigateacher.activity.video.BitmapEntity;
import teacher.arriga.com.arrigateacher.activity.video.TimeChange;/*** Created by Administrator on 2017/3/7.*/@SuppressLint({"InflateParams", "ViewHolder"})public class VideodetailAdapter extends BaseAdapter {private List<BitmapEntity> objects = new ArrayList<BitmapEntity>();@SuppressWarnings("unused")private Context context;private LayoutInflater layoutInflater;public VideodetailAdapter(Context context, List<BitmapEntity> objects) {this.context = context;this.layoutInflater = LayoutInflater.from(context);this.objects = objects;}public List<BitmapEntity> setObjects(List<BitmapEntity> objects) {return this.objects = objects;}@Overridepublic int getCount() {return objects.size();}@Overridepublic BitmapEntity getItem(int position) {return objects.get(position);}@Overridepublic long getItemId(int position) {return position;}/*** 数据量过大可能出现错乱,暂时不用缓存策略*/@Overridepublic View getView(int position, View convertView, ViewGroup parent) {// if (convertView == null) {convertView = layoutInflater.inflate(R.layout.videtail_list, null);ViewHolder viewHolder = new ViewHolder();viewHolder.imgv = (ImageView) convertView.findViewById(R.id.imgv);viewHolder.tv = (TextView) convertView.findViewById(R.id.tv);viewHolder.size = (TextView) convertView.findViewById(R.id.video_size);viewHolder.duration = (TextView) convertView.findViewById(R.id.video_time_long);convertView.setTag(viewHolder);//   }initializeViews((BitmapEntity) getItem(position), (ViewHolder) convertView.getTag());return convertView;}private void initializeViews(BitmapEntity object, ViewHolder holder) {Log.e("adapter", "file://" + object.getUri_thumb());ImageLoader.getInstance().displayImage("file://" + object.getUri_thumb(), holder.imgv);holder.tv.setText(object.getName());holder.size.setText(TimeChange.bytes2kb(object.getSize()) + "");holder.duration.setText(TimeChange.setTime(object.getDuration()));}protected class ViewHolder {private ImageView imgv;private TextView tv;private TextView size;private TextView duration;}}

第五步:这样就查询到了本地所有视频文件信息,显示在列表里,之前我们是通过startActivityForResult()开启的,所以我们可以在onActivityResult获取到返回的选中的视频信息.代码如下:

 @Overrideprotected void onActivityResult(int requestCode, int resultCode, Intent data) {super.onActivityResult(requestCode, resultCode, data);if (requestCode == REQUEST_CODE&& resultCode == RESULT_OK && null != data) {String selectedVideo = (String) data.getExtras().get("url");File file = new File(selectedVideo);//准备上传,显示提示文件upLoadVideo(file);}}

第六步:上传视频文件的方法upLoadVideo(File file):

   //上传视频文件到服务器private void upLoadVideo(File file) {RequestParams params=new RequestParams(HttpUrl.UP_PHOTO);params.addBodyParameter("fileType", "video");params.addBodyParameter("filePurpose","broadcastvideo");params.addBodyParameter("fkPurposeId", id);params.addParameter("uploadFile",file);x.http().post(params, new Callback.CommonCallback<String>() {@Overridepublic void onSuccess(String result) {try {JSONObject jsonObject=new JSONObject(result);String errcode = jsonObject.optString("errcode");if ("0".equals(errcode)){ToastUtil.showToast("上传成功!");//刷新界面,重新请求数据queryVideo();adapter.notifyDataSetChanged();}else{ToastUtil.showToast(jsonObject.getString("msg"));}} catch (JSONException e) {e.printStackTrace();}}@Overridepublic void onError(Throwable ex, boolean isOnCallback) {Log.e("4444",ex.getMessage().toString());}@Overridepublic void onCancelled(CancelledException cex) {}@Overridepublic void onFinished() {}});}

最后大概整个视频从本地查找,到选择,再到上传到服务器的整个过程就完成了.

查找本地所有视频,选择视频上传到服务器相关推荐

  1. java实现MinIO文件上传,并将视频文件截图,将视频封面及视频通过MinIo上传到服务器中

    java实现MinIO文件上传,并将视频文件截图,将视频封面及视频通过MinIo上传到服务器中 配置完毕,接下来开始代码编写. 说明 总过程分为两步. 1.配置MinIO的环境. 2.代码编写. 下面 ...

  2. 小程序 图片上传php后台,微信小程序图片选择、上传到服务器、预览(PHP)实现实例...

    微信小程序图片选择.上传到服务器.预览(php)实现实例 小程序实现选择图片.预览图片.上传到开发者服务器上 后台使用的tp3.2 图片上传 请求时候的header参考时可以去掉(个人后台验证权限使用 ...

  3. php 点击选择图片上传,微信小程序图片选择、上传到服务器、预览(PHP)实现实例...

    微信小程序图片选择.上传到服务器.预览(PHP)实现实例 小程序实现选择图片.预览图片.上传到开发者服务器上 后台使用的tp3.2 图片上传 请求时候的header参考时可以去掉(个人后台验证权限使用 ...

  4. 最近在做支付宝支付,在本地测试一切正常,上传到服务器就遇到报错:

    最近在做支付宝支付,在本地测试一切正常,上传到服务器就遇到报错: Warning: openssl_sign() [function.openssl-sign]: Unknown signature ...

  5. 服务器在线看视频无法播放,上传到服务器的视频不能在线播放怎么办?

    原标题:上传到服务器的视频不能在线播放怎么办? 问题:我们在本地测试视频播放时,常常遇到这种情况,本地测试视频是可以正常播放的,但项目上传服务器后,视频就无法播放了,原因通常有以下几种,原因及解决方案 ...

  6. 淘淘商城第三天—完成商品添加功能 商品类目选择 图片上传 图片服务器搭建 kindEditor富文本编辑器的使用 商品添加功能

    1.实现商品类目选择功能 1.1需求 在商品添加页面,点击"选择类目"显示商品类目列表: 请求初始化树形控件的url:/item/cat/list 1.2 EasyUI tree数 ...

  7. 服务器启动缺失文件,麻烦请问下,本地win运行没问题 , 上传到服务器后 , 报错,说是缺少文件...

    这个文件肯定是存在的 ``` [think\exception\ThrowableError] Fatal error: Class 'GatewayWorker\Register' not foun ...

  8. 织梦文件 上传 服务器,织梦源码上传云服务器

    织梦源码上传云服务器 内容精选 换一换 WinSCP工具可以实现在本地与远程计算机之间安全地复制文件.与使用FTP上传代码相比,通过 WinSCP 可以直接使用服务器账户密码访问服务器,无需在服务器端 ...

  9. iOS 录视频,相册选择视频,视频压缩,存储本地文件,播放,上传

    iOS 录视频,相册选择视频,视频压缩,存储本地文件,播放,上传 工程中用到了这部分的功能,也纠结了几天后做完了,现在总结下这部分的东西. 先说描述下需求: (1)从相册取视频.录视频: (2)视频转 ...

最新文章

  1. MIT公布“著名黑客之死”调查报告
  2. SpringBoot配置属性之Server
  3. 蚂蚁金服自研的OceanBase升级到2.0了,据说性能……
  4. Windows中断编程
  5. VSS 的修复和扫描
  6. Java黑皮书课后题第4章:*4.11(十进制转十六进制)编写程序,提示用户输入0~15之间的一个整数,显示其对应的十六进制数。对于不正确的输入数字,提示非法输入
  7. 《管理转型》——读书随笔
  8. linux 关闭web服务器端口,linux(solaris)下如何关掉端口及服务
  9. C#基础加强(8)之委托和事件
  10. 一文弄懂宇宙的历史与结构(图文并茂)!
  11. SpringCloud集成Dubbo实现RPC调用
  12. python编程输入三个数按大小输出_编程:输入3个数,按从小到大的顺序输出
  13. 笔记本电脑下载python视频-Python的用法笔记本
  14. 读Zepto源码之Touch模块
  15. 新浪微博:“救命的黄金稻草”
  16. 微积分(七)——一元函数积分学
  17. Python:实现miller rabin米勒-拉宾素性检验算法(附完整源码)
  18. 神经网络实现手写数字识别
  19. 微信小程序(小游戏)的示例
  20. 【quill-editor】富文本编辑器对图片的放大缩小拖拽的实现

热门文章

  1. 《计算机文化基础》 北京理工大学出版社,大学计算机基础教学合同(杜丽).doc...
  2. 《Android 应用案例开发大全(第3版)》——第2章,第2.1节壁纸的背景及功能概述...
  3. 抖音四面被拒,再战头条终获offer,附架构师必备技术详解
  4. IntelliJ IDEA远程调试
  5. 【C语言】自定义类型
  6. html+css制作简易12306页面
  7. 1688api各种接口详情及返回值说明
  8. Mysql开启外网访问
  9. Android studio 微信APP之Fragment中使用ReclerView
  10. Android制作微信登录功能,Android 实现微信登录详解