查找本地所有视频,选择视频上传到服务器
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() {}});}
最后大概整个视频从本地查找,到选择,再到上传到服务器的整个过程就完成了.
查找本地所有视频,选择视频上传到服务器相关推荐
- java实现MinIO文件上传,并将视频文件截图,将视频封面及视频通过MinIo上传到服务器中
java实现MinIO文件上传,并将视频文件截图,将视频封面及视频通过MinIo上传到服务器中 配置完毕,接下来开始代码编写. 说明 总过程分为两步. 1.配置MinIO的环境. 2.代码编写. 下面 ...
- 小程序 图片上传php后台,微信小程序图片选择、上传到服务器、预览(PHP)实现实例...
微信小程序图片选择.上传到服务器.预览(php)实现实例 小程序实现选择图片.预览图片.上传到开发者服务器上 后台使用的tp3.2 图片上传 请求时候的header参考时可以去掉(个人后台验证权限使用 ...
- php 点击选择图片上传,微信小程序图片选择、上传到服务器、预览(PHP)实现实例...
微信小程序图片选择.上传到服务器.预览(PHP)实现实例 小程序实现选择图片.预览图片.上传到开发者服务器上 后台使用的tp3.2 图片上传 请求时候的header参考时可以去掉(个人后台验证权限使用 ...
- 最近在做支付宝支付,在本地测试一切正常,上传到服务器就遇到报错:
最近在做支付宝支付,在本地测试一切正常,上传到服务器就遇到报错: Warning: openssl_sign() [function.openssl-sign]: Unknown signature ...
- 服务器在线看视频无法播放,上传到服务器的视频不能在线播放怎么办?
原标题:上传到服务器的视频不能在线播放怎么办? 问题:我们在本地测试视频播放时,常常遇到这种情况,本地测试视频是可以正常播放的,但项目上传服务器后,视频就无法播放了,原因通常有以下几种,原因及解决方案 ...
- 淘淘商城第三天—完成商品添加功能 商品类目选择 图片上传 图片服务器搭建 kindEditor富文本编辑器的使用 商品添加功能
1.实现商品类目选择功能 1.1需求 在商品添加页面,点击"选择类目"显示商品类目列表: 请求初始化树形控件的url:/item/cat/list 1.2 EasyUI tree数 ...
- 服务器启动缺失文件,麻烦请问下,本地win运行没问题 , 上传到服务器后 , 报错,说是缺少文件...
这个文件肯定是存在的 ``` [think\exception\ThrowableError] Fatal error: Class 'GatewayWorker\Register' not foun ...
- 织梦文件 上传 服务器,织梦源码上传云服务器
织梦源码上传云服务器 内容精选 换一换 WinSCP工具可以实现在本地与远程计算机之间安全地复制文件.与使用FTP上传代码相比,通过 WinSCP 可以直接使用服务器账户密码访问服务器,无需在服务器端 ...
- iOS 录视频,相册选择视频,视频压缩,存储本地文件,播放,上传
iOS 录视频,相册选择视频,视频压缩,存储本地文件,播放,上传 工程中用到了这部分的功能,也纠结了几天后做完了,现在总结下这部分的东西. 先说描述下需求: (1)从相册取视频.录视频: (2)视频转 ...
最新文章
- MIT公布“著名黑客之死”调查报告
- SpringBoot配置属性之Server
- 蚂蚁金服自研的OceanBase升级到2.0了,据说性能……
- Windows中断编程
- VSS 的修复和扫描
- Java黑皮书课后题第4章:*4.11(十进制转十六进制)编写程序,提示用户输入0~15之间的一个整数,显示其对应的十六进制数。对于不正确的输入数字,提示非法输入
- 《管理转型》——读书随笔
- linux 关闭web服务器端口,linux(solaris)下如何关掉端口及服务
- C#基础加强(8)之委托和事件
- 一文弄懂宇宙的历史与结构(图文并茂)!
- SpringCloud集成Dubbo实现RPC调用
- python编程输入三个数按大小输出_编程:输入3个数,按从小到大的顺序输出
- 笔记本电脑下载python视频-Python的用法笔记本
- 读Zepto源码之Touch模块
- 新浪微博:“救命的黄金稻草”
- 微积分(七)——一元函数积分学
- Python:实现miller rabin米勒-拉宾素性检验算法(附完整源码)
- 神经网络实现手写数字识别
- 微信小程序(小游戏)的示例
- 【quill-editor】富文本编辑器对图片的放大缩小拖拽的实现
热门文章
- 《计算机文化基础》 北京理工大学出版社,大学计算机基础教学合同(杜丽).doc...
- 《Android 应用案例开发大全(第3版)》——第2章,第2.1节壁纸的背景及功能概述...
- 抖音四面被拒,再战头条终获offer,附架构师必备技术详解
- IntelliJ IDEA远程调试
- 【C语言】自定义类型
- html+css制作简易12306页面
- 1688api各种接口详情及返回值说明
- Mysql开启外网访问
- Android studio 微信APP之Fragment中使用ReclerView
- Android制作微信登录功能,Android 实现微信登录详解