qq_43544413 2019-08-20 15:42 采纳率: 0%
浏览 1260

关于腾讯TBS预览wps文件的问题!有大神来观摩观摩吗?

小弟最近做一个预览上传下载附件的功能用到了老马的TBS然后在8.0的手机上大部分的
文件都可以打开预览也能上传成功,但是在7.0和9.0的华为手机上面就提示文件无法预览请到
其它应用打开。我打来的是doc文件。目前就只用这个两个系统出问题。有大神搞过的这个可以跟我交流一下帮助一下小弟吗?我的配置如下

ndk{
            abiFilters  "armeabi", "armeabi-v7a", "x86", "mips"
        }

具体代码处理

package com.chenxi.bimquanziguankong.view;

import android.content.Context;
import android.os.Bundle;
import android.os.Environment;
import android.text.TextUtils;
import android.util.AttributeSet;
import android.view.LayoutInflater;
import android.view.View;
import android.widget.FrameLayout;
import android.widget.LinearLayout;
import android.widget.RelativeLayout;

import com.blankj.utilcode.util.LogUtils;
import com.chenxi.bimquanziguankong.R;
import com.tencent.smtt.sdk.TbsReaderView;

import java.io.File;

public class SuperFileView2 extends FrameLayout implements TbsReaderView.ReaderCallback {

    private static String TAG = "SuperFileView";
    private TbsReaderView mTbsReaderView;
    private int saveTime = -1;
    private Context context;

    public SuperFileView2(Context context) {
        this(context, null, 0);
    }

    public SuperFileView2(Context context, AttributeSet attrs) {
        this(context, attrs, 0);
    }

    public SuperFileView2(Context context, AttributeSet attrs, int defStyleAttr) {
        super(context, attrs, defStyleAttr);
        mTbsReaderView = new TbsReaderView(context, this);
        this.addView(mTbsReaderView, new LinearLayout.LayoutParams(-1, -1));
        this.context = context;
    }


    private OnGetFilePathListener mOnGetFilePathListener;


    public void setOnGetFilePathListener(OnGetFilePathListener mOnGetFilePathListener) {
        this.mOnGetFilePathListener = mOnGetFilePathListener;
    }


    private TbsReaderView getTbsReaderView(Context context) {
        return new TbsReaderView(context, this);
    }

    public void displayFile(File mFile) {

        if (mFile != null && !TextUtils.isEmpty(mFile.toString())) {
            //增加下面一句解决没有TbsReaderTemp文件夹存在导致加载文件失败
            String bsReaderTemp ="/storage/emulated/0/TbsReaderTemp";
            File bsReaderTempFile = new File(bsReaderTemp);

            if (!bsReaderTempFile.exists()) {
                LogUtils.d(TAG, "准备创建/storage/emulated/0/TbsReaderTemp!!");
                boolean mkdir = bsReaderTempFile.mkdirs();
                if (!mkdir) {
                    LogUtils.e(TAG, "创建/storage/emulated/0/TbsReaderTemp失败!!!!!");
                }
            }

            //加载文件
            Bundle localBundle = new Bundle();
            LogUtils.d(TAG, mFile.toString());
            localBundle.putString("filePath", mFile.toString());
            String str = mFile.toString();
            localBundle.putString("tempPath", Environment.getExternalStorageDirectory() + "/" + "TbsReaderTemp");

            if (this.mTbsReaderView == null)
                this.mTbsReaderView = getTbsReaderView(context);
            boolean bool = this.mTbsReaderView.preOpen(getFileType(mFile.toString()), false);
            if (bool) {
                    this.mTbsReaderView.openFile(localBundle);
            } else {
                View view = LayoutInflater.from(context).inflate(R.layout.activity_preview_file, null);
                com.tencent.smtt.sdk.WebView forumConte = (com.tencent.smtt.sdk.WebView) view.findViewById(R.id.webview);
                SuperFileView2 mSuperFileView = (SuperFileView2) view.findViewById(R.id.mSuperFileView);
                RelativeLayout reviewFaild = (RelativeLayout) view.findViewById(R.id.rl_preview_faild);

                forumConte.setVisibility(GONE);
                mSuperFileView.setVisibility(GONE);
                reviewFaild.setVisibility(VISIBLE);
            }
        } else {
            LogUtils.e(TAG, "文件路径无效!");
        }

    }

    /***
     * 获取文件类型
     *
     * @param paramString
     * @return
     */
    private String getFileType(String paramString) {
        String str = "";

        if (TextUtils.isEmpty(paramString)) {
            LogUtils.d(TAG, "paramString---->null");
            return str;
        }
        LogUtils.d(TAG, "paramString:" + paramString);
        int i = paramString.lastIndexOf('.');
        if (i <= -1) {
            LogUtils.d(TAG, "i <= -1");
            return str;
        }


        str = paramString.substring(i + 1);
        LogUtils.d(TAG, "paramString.substring(i + 1)------>" + str);
        return str;
    }

    public void show() {
        if (mOnGetFilePathListener != null) {
            mOnGetFilePathListener.onGetFilePath(this);
        }
    }

    /***
     * 将获取File路径的工作,“外包”出去
     */
    public interface OnGetFilePathListener {
        void onGetFilePath(SuperFileView2 mSuperFileView2);
    }


    @Override
    public void onCallBackAction(Integer integer, Object o, Object o1) {
        LogUtils.e(TAG, "****************************************************" + integer);
    }

    public void onStopDisplay() {
        if (mTbsReaderView != null) {
            mTbsReaderView.onStop();
        }
    }

}


myapplication里面的初始化代码如下

private void initTbs() {
        //搜集本地tbs内核信息并上报服务器,服务器返回结果决定使用哪个内核。
        QbSdk.PreInitCallback cb = new QbSdk.PreInitCallback() {

            @Override
            public void onViewInitFinished(boolean arg0) {
                Log.d("MyApplication", " onViewInitFinished is " + arg0);
            }

            @Override
            public void onCoreInitFinished() {
            }
        };

        QbSdk.setTbsListener(new TbsListener() {
            @Override
            public void onDownloadFinish(int i) {

            }

            @Override
            public void onInstallFinish(int i) {

            }

            @Override
            public void onDownloadProgress(int i) {

            }
        });

        QbSdk.initX5Environment(getApplicationContext(), cb);
    }

有点乱集成过得小伙伴可以给小弟指点迷津啊!

  • 写回答

1条回答

  • zqbnqsdsmd 2019-08-21 15:18
    关注
    评论

报告相同问题?

悬赏问题

  • ¥30 帮我写一段可以读取LD2450数据并计算距离的Arduino代码
  • ¥15 C#调用python代码(python带有库)
  • ¥15 矩阵加法的规则是两个矩阵中对应位置的数的绝对值进行加和
  • ¥15 活动选择题。最多可以参加几个项目?
  • ¥15 飞机曲面部件如机翼,壁板等具体的孔位模型
  • ¥15 vs2019中数据导出问题
  • ¥20 云服务Linux系统TCP-MSS值修改?
  • ¥20 关于#单片机#的问题:项目:使用模拟iic与ov2640通讯环境:F407问题:读取的ID号总是0xff,自己调了调发现在读从机数据时,SDA线上并未有信号变化(语言-c语言)
  • ¥20 怎么在stm32门禁成品上增加查询记录功能
  • ¥15 Source insight编写代码后使用CCS5.2版本import之后,代码跳到注释行里面