Android实现上传本地或拍摄的视频到Bmob服务器 – CSDN博客

来源: Android实现上传本地或拍摄的视频到Bmob服务器 – CSDN博客

好久没有更博客了,今天来说说如何实现上传本地或拍摄的视频到Bmob服务器吧。其实上传文件的代码格式都差不多,可以修改套用就能实现。

Adndroid中通过Intent 可以实现调用图片、视频、音频、录音、拍照等功能。例如调用图片可以用如下格式:

  1. <span style=“font-size:18px;”>//选择图片 requestCode 返回的标识
  2. Intent intent = new Intent(Intent.ACTION_GET_CONTENT);
  3.  //”Android.intent.action.GET_CONTENT”
  4. intent.setType(contentType);
  5. //查看类型 ,可以在之前定义String IMAGE_UNSPECIFIED = “image/*”;
  6. Intent wrapperIntent = Intent.createChooser(intent, null);
  7. ((Activity) context).startActivityForResult(wrapperIntent, requestCode);
  8. //拍照 REQUEST_CODE_TAKE_PICTURE 为返回的标识
  9. Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
  10. //”Android.media.action.IMAGE_CAPTURE”;
  11. intent.putExtra(MediaStore.EXTRA_OUTPUT, Mms.ScrapSpace.CONTENT_URI);
  12.  // output,Uri.parse(“content://mms/scrapSpace”);
  13. startActivityForResult(intent, REQUEST_CODE_TAKE_PICTURE);</span>

调用视频的格式如下:

  1. <span style=“font-size:18px;”>//拍摄视频
  2. int durationLimit = getVideoCaptureDurationLimit();
  3. //SystemProperties.getInt(“ro.media.enc.lprof.duration”, 60);
  4. Intent intent = new Intent(MediaStore.ACTION_VIDEO_CAPTURE);
  5. intent.putExtra(MediaStore.EXTRA_VIDEO_QUALITY, 0);
  6. intent.putExtra(MediaStore.EXTRA_SIZE_LIMIT, sizeLimit);
  7. intent.putExtra(MediaStore.EXTRA_DURATION_LIMIT, durationLimit);
  8. startActivityForResult(intent, REQUEST_CODE_TAKE_VIDEO);
  9. //视频
  10. Intent intent = new Intent(Intent.ACTION_GET_CONTENT);
  11. intent.setType(contentType); //String VIDEO_UNSPECIFIED = “video/*”;
  12. Intent wrapperIntent = Intent.createChooser(intent, null);
  13. ((Activity) context).startActivityForResult(wrapperIntent, requestCode);</span>

还有调用调用录音,添加音频的格式如下:

  1. <span style=“font-size:18px;”>//添加音频
  2. Intent intent = new Intent(Intent.ACTION_GET_CONTENT);
  3. intent.setType(contentType);
  4.  //String VIDEO_UNSPECIFIED = “video/*”;
  5. Intent wrapperIntent = Intent.createChooser(intent, null);
  6. ((Activity) context).startActivityForResult(wrapperIntent, requestCode);
  7. //录音
  8. Intent intent = new Intent(Intent.ACTION_GET_CONTENT);
  9. intent.setType(ContentType.AUDIO_AMR);
  10.  //String AUDIO_AMR = “audio/amr”;
  11. intent.setClassName(“com.Android.soundrecorder”,
  12. “com.android.soundrecorder.SoundRecorder”);
  13. ((Activity) context).startActivityForResult(intent, requestCode);</span>

本文着重讲讲如何调用视频格式的功能,并上传到Bmob服务器。一开始使用以上的格式的代码时发现调用出现问题,通过查找资料发现 “Intent intent = new Intent(Intent.ACTION_GET_CONTENT);”这个引用方法对Android 4.0以上版本并不适用,需要改成“Intent intent = new Intent(Intent.ACTION_PICK);”这个格式才能解决问题。打开视频文件的目录后选择视频,或者先选择录制视频再选择上传,如图所示效果:

下面贴上具体代码,首先是上传本地视频的格式代码:

  1. <span style=“font-size:18px;”>Uri uri = data.getData();
  2.  File file = getFileByUri(uri);
  3.  MediaMetadataRetriever mmr=new MediaMetadataRetriever();//实例化MediaMetadataRetriever对象  
  4.  mmr.setDataSource(file.getAbsolutePath());
  5.  Bitmap bitmap=mmr.getFrameAtTime();//获得视频第一帧的Bitmap对象
  6.  String duration = mmr.extractMetadata(android.media.MediaMetadataRetriever.METADATA_KEY_DURATION);//时长(毫秒)
  7.  Log.d(“ddd”,“duration==”+duration);
  8.  int int_duration= Integer.parseInt(duration);
  9.       if(int_duration>300000){
  10. Toast.makeText(getApplicationContext(), “视频时长已超过5分钟,请重新选择”, Toast.LENGTH_SHORT).show();
  11.       }</span>

这里我设置了视频的时间限制,不能超过5分钟,否则上传失败。上传成功,在界面的下方会出现视频第一帧的Bitmap图像。上传成功后,Bmob服务器中显示的视频格式如图:

然后如果是拍摄的视频,代码格式如下:

  1. <span style=“font-size:18px;”>if (cursor != null && cursor.moveToNext()) {
  2. int id = cursor.getInt(cursor.getColumnIndex(VideoColumns._ID));
  3. String filePath = cursor.getString(cursor.getColumnIndex(VideoColumns.DATA));
  4.         bitmap1 = Thumbnails.getThumbnail(getContentResolver(), id, Thumbnails.MICRO_KIND, null);
  5. // ThumbnailUtils类2.2以上可用
  6. // Bitmap bitmap = ThumbnailUtils.createVideoThumbnail(filePath,
  7. // Thumbnails.MICRO_KIND);
  8. Log.d(“ddd”“filepath==” + filePath);
  9. File file1=new File(filePath);
  10. cursor.close();
  11. //上传到Bomb部分的代码
  12. final BmobFile icon1 = new BmobFile(file1);
  13.   icon1.upload(thisnew UploadFileListener() {
  14.   @Override
  15.  public void onSuccess() {
  16.       //Person person = new Person();             
  17.       shipin.setDescribe(describe);
  18.       shipin.setTitle(title);
  19.       shipin.setIcon(icon1);
  20.       shipin.setAuthor(author);///////////////////////////
  21.       shipin.setUser(user1);///////////////////////////
  22.       shipin.setUsernames(usernames1);////////////////////////
  23.       shipin.setAtavars(avatars1);//////////////////////////
  24.       shipin.save(Ad2.this);
  25.       Toast.makeText(Ad2.this,“视频上传成功~”,Toast.LENGTH_SHORT).show();
  26.       Toast.makeText(Ad2.this,“视频发表成功~”,Toast.LENGTH_SHORT).show();
  27.     }
  28. @Override
  29.  public void onFailure(int arg0, String arg1) {
  30.            Toast.makeText(Ad2.this,“上传失败,请检查网络~”,Toast.LENGTH_SHORT).show();
  31.  }
  32.  @Override
  33.  public void onProgress(Integer arg0) {//////////////////////////////123
  34.    // TODO Auto-generated method stub
  35.     }
  36.    });
  37.   ivHead.setImageBitmap(bitmap1);
  38.          btn_true.setOnClickListener(new OnClickListener(){
  39.         public void onClick(View v) {
  40.            // TODO Auto-generated method stub
  41.            finish();
  42.            }///////////////////
  43.            });////////////// 
  44.    }</span>

最后在贴一张运行后的效果图:

别忘了添加权限:

  1. <span style=“font-size:18px;”><uses-permission Android:name=“android.permission.INTERNET” />
  2. <uses-permission android:name=“android.permission.MOUNT_UNMOUNT_FILESYSTEMS”  />
  3. <uses-permission android:name=“android.permission.WRITE_EXTERNAL_STORAGE”  /></span>

之后有机会再详细说明视频缩略图的获取显示~谢谢支持~!

分享到:更多 ()