1. 程式人生 > 其它 >安卓內部應用開啟附件

安卓內部應用開啟附件

技術標籤:工具類安卓android

APP使用TBS開啟不同的附件

最近專案中加入了通知功能,裡面有附件的檢視操作,查看了一些資料後發現騰訊Tbs支援應用內部開啟附件,並且簡單方便,目前我只用到了幾種滿足自己需求的格式(例如doc、excel、ppt、excel、pdf等格式);
騰訊TBS官網,地址:https://x5.tencent.com/tbs/guide/sdkInit.html

首先下載TBS的sdk,按照需求把裡面的lib地下jar包拷貝到專案去,還有.so庫
在這裡插入圖片描述

然後配置gradle相容:

在這裡插入圖片描述
其中主要是用到了TbsReaderView這個控制元件;

public class SuperFileView extends FrameLayout implements TbsReaderView.ReaderCallback {
    private static String TAG = "SuperFileView";
    private TbsReaderView mTbsReaderView;
    private int saveTime = -1;
    private Context context;

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

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

    public SuperFileView(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("準備建立/storage/emulated/0/TbsReaderTemp!!");
                boolean mkdir = bsReaderTempFile.mkdir();
                if(!mkdir){
                    LogUtils.e("建立/storage/emulated/0/TbsReaderTemp失敗!!!!!");
                }
            }

            //載入檔案
            Bundle localBundle = new Bundle();
            LogUtils.d(mFile.toString());
            localBundle.putString("filePath", 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 {
            LogUtils.e("檔案路徑無效!");
        }

    }

    /***
     * 獲取檔案型別
     *
     * @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(SuperFileView mSuperFileView2);
    }


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

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

其他的看程式碼吧,哈哈哈—>
專案地址:https://github.com/zhangshaopeng/Tbs