即时通讯--腾讯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);
}
}
});