android小视频,Android 端小视频开发与使用说明

Android 端小视频开发与使用说明

一、常规使用,在会话页面底部扩展面板:

二、自定义发送入口:

如果不想在会话页面底部扩展面板进入小视频录制发送页面,而是想在其他地方进入小视频录制发送页面,实现步骤:注册消息和消息模板。RongIM.registerMessageType(SightMessage.class);

RongIM.registerMessageTemplate(new SightMessageItemProvider());

进入默认的消息录制和发送页面。

权限申请,如果是 6.0 以下,则相应的权限已在 Kit 的AndroidManifest.xml 里声明了,无需处理。如果是 6.0 或以上,需要动态权限申请,所需要的权限如下:/**

* 点击开始录制小视频

* @param view

*/

public void onRecordClick(View view) {

String[] permissions = {

Manifest.permission.CAMERA,

Manifest.permission.RECORD_AUDIO,

Manifest.permission.WRITE_EXTERNAL_STORAGE,

Manifest.permission.READ_EXTERNAL_STORAGE

};

if (checkPermission(permissions)) {

startSightRecord(this);

} else {

ActivityCompat.requestPermissions(this, permissions, PERMISSION_REQUEST_CODE);

}

}

private boolean checkPermission(String[] permissions) {

for (String permission : permissions)

if (ContextCompat.checkSelfPermission(this, permission) != PackageManager.PERMISSION_GRANTED)

return false;

return true;

}

@Override

public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions,

@NonNull int[] grantResults) {

super.onRequestPermissionsResult(requestCode, permissions, grantResults);

if (requestCode == PERMISSION_REQUEST_CODE) {

boolean isAllGranted = true;

for (int grant : grantResults) {

if (grant != PackageManager.PERMISSION_GRANTED) {

isAllGranted = false;

break;

}

}

if (isAllGranted) {

startSightRecord(this);

} else {

// TODO: 弹框告知用户需要权限的原因,引导用户在应用权限管理中手动打开权限。

}

}

}

获取权限后,跳转进入小视频录制界面:/**

* 跳转进入小视频录制和发送页面

*

* @param activity 当前页面activity,更具需求,也可以改为fragment或其他

*/

private void startSightRecord(Activity activity) {

File saveDir = null;

// 设置小视频本地存储路径

if (ContextCompat.checkSelfPermission(activity, Manifest.permission.WRITE_EXTERNAL_STORAGE) == PackageManager.PERMISSION_GRANTED) {

saveDir = new File(Environment.getExternalStorageDirectory(), "RongCloud/Media");

if (!saveDir.exists()) {

saveDir.mkdirs();

}

}

Intent intent = new Intent(activity, SightRecordActivity.class);

intent.putExtra("conversationType", conversationType.getValue());   // 当前要发送给对方的会话类型,在发送小视频消息时会用到

intent.putExtra("targetId", targetId);      // 发送给对方的id

intent.putExtra("recordSightDir", saveDir.getAbsolutePath());    // 本地路径

int maxRecordDuration = 10; // 设置最大拍摄时长,单位秒

intent.putExtra("maxRecordDuration", maxRecordDuration);//seconds

activity.startActivity(intent);

}

三、自定义小视频录制和发送页面

可以参考SDK内置 SightRecordActivity,实现自己的录制发送页面CustomRecordActivity,小视频录制的UI和逻辑都在 CameraView 这个类里,这个类无法修改,在自己自定义的 CustomRecordActivity 的布局文件中加入 CameraView,这里如果有其他需求,可以自定义加入其他 UI 元素。

CustomRecordActivity 源码:public class CustomRecordActivity extends AppCompatActivity {

private CameraView mCameraView;

private String targetId;

private Conversation.ConversationType conversationType;

@Override

protected void onCreate(@Nullable Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

this.requestWindowFeature(Window.FEATURE_NO_TITLE);

getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN, WindowManager.LayoutParams.FLAG_FULLSCREEN);

this.setContentView(R.layout.activity_custom);

this.mCameraView = (CameraView) this.findViewById(R.id.cameraView);

this.mCameraView.setAutoFocus(false);

this.mCameraView.setSupportCapture(this.getIntent().getBooleanExtra("supportCapture", false));

this.mCameraView.setSaveVideoPath(this.getIntent().getStringExtra("recordSightDir"));

this.mCameraView.setMaxRecordDuration(this.getIntent().getIntExtra("maxRecordDuration", 10));

this.targetId = this.getIntent().getStringExtra("targetId");

this.conversationType = Conversation.ConversationType.setValue(this.getIntent().getIntExtra("conversationType", 1));

this.mCameraView.setCameraViewListener(new CameraView.CameraViewListener() {

public void quit() {

CustomRecordActivity.this.finish();

}

public void captureSuccess(Bitmap bitmap) {

}

public void recordSuccess(String url, int recordTime) {

if (TextUtils.isEmpty(url)) {

CustomRecordActivity.this.finish();

} else {

File file = new File(url);

if (!file.exists()) {

CustomRecordActivity.this.finish();

} else {

SightMessage sightMessage = SightMessage.obtain(Uri.fromFile(file), recordTime);

Message message = Message.obtain(CustomRecordActivity.this.targetId, CustomRecordActivity.this.conversationType, sightMessage);

RongIM.getInstance().sendMediaMessage(message, getString(io.rong.sight.R.string.rc_message_content_sight), null, (IRongCallback.ISendMediaMessageCallback) null);

CustomRecordActivity.this.finish();

}

}

}

});

}

@Override

protected void onResume() {

super.onResume();

this.mCameraView.onResume();

}

@Override

protected void onPause() {

super.onPause();

this.mCameraView.onPause();

}

}

四、小视频上传到自己的媒体服务器(待定)

SDK 默认上传到融云的服务器,有效存储期为 6 个月。目前只有私有云支持上传到指定的媒体服务器,服务器地址需要调用融云 SDK 接口配置,使用如下:/**

* 设置私有部署的导航服务器和媒体服务器地址。

* 此方法要在 {@link #init(Context, String)} 前使用

*

* @param naviServer 私有部署的导航服务器地址。

* @param fileServer 私有部署的媒体服务器地址,即文件和图片的上传地址。使用私有云时必须填写。

*/

public static void setServerInfo(final String naviServer, final String fileServer) {

...

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值