融云发送视频消息
融云不支持视频消息,需要自定义消息。
1.在输入区域自定义一个按钮,
2.融云是支持文件传输的,我这里没有去自定义消息,我是用的文件传输消息FileMessage,FileMessage消息的逻辑就是返回一个文件地址,我去后台取到视频以后返回视频的地址,更新到ui上,做了一个很不友好的视频发送功能
代码:这里是选取视频的代码
public class VedioActivity extends AppCompatActivity {
private ListView listView;
ArrayList vList;
private Intent lastIntent;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_vedio);
lastIntent = getIntent();
listView = ((ListView) findViewById(R.id.listView2));
initData();
listView.setOnItemClickListener(new ItemClick());
}
private void initData() {
vList = new ArrayList<VideoInfo>();
String[] mediaColumns = new String[]{MediaStore.MediaColumns.DATA,
BaseColumns._ID, MediaStore.MediaColumns.TITLE, MediaStore.MediaColumns.MIME_TYPE,
MediaStore.Video.VideoColumns.DURATION, MediaStore.MediaColumns.SIZE};
Cursor cursor = getContentResolver().query(
MediaStore.Video.Media.EXTERNAL_CONTENT_URI, mediaColumns,
null, null, null);
if (cursor.moveToFirst()) {
do {
VideoInfo info = new VideoInfo();
info.setFilePath(cursor.getString(cursor
.getColumnIndexOrThrow(MediaStore.MediaColumns.DATA)));
info.setMimeType(cursor.getString(cursor
.getColumnIndexOrThrow(MediaStore.MediaColumns.MIME_TYPE)));
info.setTitle(cursor.getString(cursor
.getColumnIndexOrThrow(MediaStore.MediaColumns.TITLE)));
// info.setTime(CommTools.LongToHms(cursor.getInt(cursor
// .getColumnIndexOrThrow(MediaStore.Video.VideoColumns.DURATION))));
// info.setSize(CommTools.LongToPoint(cursor
// .getLong(cursor
// .getColumnIndexOrThrow(MediaStore.MediaColumns.SIZE))));
int id = cursor.getInt(cursor
.getColumnIndexOrThrow(BaseColumns._ID));
BitmapFactory.Options options = new BitmapFactory.Options();
options.inDither = false;
options.inPreferredConfig = Bitmap.Config.ARGB_8888;
info.setB(MediaStore.Video.Thumbnails.getThumbnail(getContentResolver(), id,
MediaStore.Images.Thumbnails.MICRO_KIND, options));
vList.add(info);
} while (cursor.moveToNext());
}
VideoListAdapter adapter = new VideoListAdapter(this, vList);
listView.setAdapter(adapter);
}
private class ItemClick implements AdapterView.OnItemClickListener {
@Override
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
listView.getItemAtPosition(position);
String filePath = vList.get(position).getFilePath();
lastIntent.putExtra("path", filePath);
setResult(102, lastIntent);
finish();
}
}
class VideoListAdapter extends BaseAdapter {
private LayoutInflater inflater;
private ArrayList<VideoInfo> vList;
public VideoListAdapter(Context context, ArrayList<VideoInfo> videoList) {
this.inflater = LayoutInflater.from(context);
this.setVideoList(videoList);
}
public void setVideoList(ArrayList<VideoInfo> videoList) {
this.vList = videoList;
}
@Override
public int getCount() {
return vList.size();
}
@Override
public Object getItem(int p) {
return vList.get(p);
}
@Override
public long getItemId(int p) {
return p;
}
@Override
public View getView(final int position, View convertView, ViewGroup parent) {
final ViewHolder holder;
if (convertView == null) {
holder = new ViewHolder();
convertView = inflater.inflate(R.layout.item_video_list, null);
holder.vImage = (ImageView) convertView.findViewById(R.id.video_img);
holder.vTitle = (TextView) convertView.findViewById(R.id.video_title);
// holder.vSize = (TextView) convertView.findViewById(R.id.video_size);
// holder.vTime = (TextView) convertView.findViewById(R.id.video_time);
convertView.setTag(holder);
} else {
holder = (ViewHolder) convertView.getTag();
}
holder.vImage.setImageBitmap(vList.get(position).getB());
holder.vTitle.setText(vList.get(position).getTitle());
// holder.vSize.setText(vList.get(position).getSize());
// holder.vTime.setText(vList.get(position).getTime());
holder.vImage.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Intent intent = new Intent(Intent.ACTION_VIEW);
String bpath = "file://" + vList.get(position).getFilePath();
intent.setDataAndType(Uri.parse(bpath), "video/*");
startActivity(intent);
}
});
return convertView;
}
class ViewHolder {
ImageView vImage;
TextView vTitle;
// TextView vSize;
// TextView vTime;
}
}
}
这里是自定义发送视频消息的按钮发送消息的代码
@Override
public void onActivityResult(int i, int i1, Intent intent) {
switch (i) {
case 101:
if (i1 == 102 && intent != null) {
filPaths = intent.getStringExtra(“path”);
Log.e(“MyPlugin”,filPaths);
Uri filePath = Uri.parse(“file://” + filPaths);
FileMessage fileMessage = FileMessage.obtain(filePath);
if(fileMessage != null) {
fileMessage.setType(“bin”);
Message message = Message.obtain(“2”, Conversation.ConversationType.PRIVATE, fileMessage);
RongIM.getInstance().sendMediaMessage(message, (String)null, (String)null, (IRongCallback.ISendMediaMessageCallback)null);
}
}
break;
default:
break;
}
}
到了这里就能发送视频消息成功了,MP4格式的,但是很可气的是,视频不能播放,说是格式不正确,爱奇艺和腾讯视频都播放不了,气死我了!