腾讯---即时通讯im--在聊天消息打开文件的解决方案


前言

android解决在应用中打开文件是一个重要的问题;尤其是引入第三方控件时,容易使刚接触的人找不到问题的解决思路;


一、如何解决打开文件?

目前解决问题的方案是:1.跳转第三方软件打开;2.直接打开

二、使用步骤

1.引入腾讯im

不建议以"gradle 接入集成",而是采用"module 源码集成",这样有利于后期的拓展,采取以修改源码的方式来实现

2.腾讯im–文件处理类

腾讯im处理文件时,只会弹窗告知你文件的具体位置,不会直接打开文件。其中文件处理类位于"modules.chat.layout.message.holder"包下,类名为"MessageFileHolder";在腾讯im--MessageFileHolder处理逻辑: 第一种:本地文件;位于第一个msgContentFrame.setOnClickListener方法下; 第二种:网络文件;位于第二个msgContentFrame.setOnClickListener方法下;;

3.腾讯im–文件处理方式

方法一:新建activity+腾讯x5内核,直接打开;

步骤一:intent跳转,其中,FileViewActivity为目标活动。
Intent intent = new Intent(TUIKit.getAppContext(), FileViewActivity.class);
intent.addFlags(FLAG_ACTIVITY_NEW_TASK);
intent.putExtra("filepath", path);
intent.putExtra("fileSize", size);
intent.putExtra("fileName", fileName);
TUIKit.getAppContext().startActivity(intent);
步骤二:解析出文件路径并采用腾讯x5打开文件
String path = getIntent().getStringExtra("filepath");
private void dispalyFile(String path,) {
HashMap<String, String> params = new HashMap<>();
   try {QbSdk.openFileReader(this, path, params, new ValueCallback<String>() {
    @Override
    public void onReceiveValue(String s) {
               }
            });
        } catch (Exception e) {
        }
    }
总结:缺点显而易见。因为,他是重新打开了一个activity。当你打开文件后,返回主界面时,活动布局不存在控件时空白,页面不美观,所以,我采取了这样的布局:
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context=".component.file.FileViewActivity">
<RelativeLayout
        android:id="@+id/file_view_back"
        android:layout_width="wrap_content"
        android:layout_height="45dp"
        android:paddingLeft="16dp"
        android:paddingRight="30dp"
        tools:ignore="MissingConstraints">
        <ImageView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_centerVertical="true"
            android:clickable="false"
            android:src="@drawable/title_bar_back" /></RelativeLayout>
    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:layout_marginTop="45dp"
        android:orientation="vertical">
        <TextView
            android:id="@+id/zidingyi_file_name"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:padding="10dp"
            android:text="文件名称:测试用例" />
        <TextView
            android:id="@+id/zidingyi_file_size"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:padding="10dp"
            android:text="文件大小:352kb" />
        <TextView
            android:id="@+id/zidingyi_file_path"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:padding="10dp"
            android:text="文件存储路径:/sss/sss/sss/ss" />
    </LinearLayout>
</androidx.constraintlayout.widget.ConstraintLayout>

解决方式二·:调用第三方;

步骤一:获取文件在线路径
fileElem.getUrl(new V2TIMValueCallback<String>() {
 @Override
 public void onError(int code, String desc) {}
 @Override
 public void onSuccess(String s) {fileUrl = s;}});
步骤二:本app调用第三方app

解决判断当前手机是否安装有wps。没有则提示,有跳转;

msgContentFrame.setOnClickListener(new View.OnClickListener() {
 @Override
 public void onClick(View v) {
   Intent intent = TUIKit.getAppContext().getPackageManager().getLaunchIntentForPackage("cn.wps.moffice_eng");
  if (intent == null) {
    ToastUtil.toastLongMessage("为了你的便捷办公,建议您下载wps!");
   } else {
    Bundle bundle = new Bundle();
    //传入文档的在线地址,免除下载的步骤,也不需要判断安卓版本号
    intent.setData(Uri.parse(fileUrl));
    intent.putExtras(bundle);
     TUIKit.getAppContext().startActivity(intent);
   }
}
 });
总结:优点显而易见。缺点:结合软件使用面向对象以及公司本身的实际需求。

解决方式三:这是我初步的想法,直接在MessagefileHolder类中点击,然后调用第一种方法,但是,始终无法正确获取到content报错。因为,该类不是一个activity。所以,如果那个仁兄解决,可以相互探讨下;

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值