精华内容
下载资源
问答
  • ch.ti8m.documenthandler这个插件,这个插件中有个功能是在线预览,但是在使用过程中发现,android系统版本在7.0以上的手机,在打开网络上的文档时(doc、pdf等),程序会奔溃退出,后来发现是因为系统高的版本,对...

    前言

    最近接手一个跨平台app的开发,项目中使用了cordova!ch.ti8m.documenthandler这个插件,这个插件中有个功能是在线预览,但是在使用过程中发现,android系统版本在7.0以上的手机,在打开网络上的文档时(doc、pdf等),程序会奔溃退出,后来发现是因为系统高的版本,对一些特殊文件夹做了保护,访问方式发生了变化,现已解决,以此记录一下,分享给又需要的朋友。

    正题

    我们先来看看之前的在线预览的写法,和具体实现:
    具体代码如下:

    	require("$UI/system/lib/cordova/cordova"); 
    	require("cordova!cordova-open"); 
    	require("cordova!cordova-plugin-file"); 
    	require("cordova!cordova-plugin-file-transfer");
    	require("cordova!cordova-plugin-x-toast");
    	require("cordova!at.modalog.cordova.plugin.cache");
    	var fileApi = require("$UI/system/components/justep/docCommon/fileApi");
    
    fileApi.browse(url, name).done(function(){
    			//alert("成功打开");
    		}).fail(function(){
    			//alert("打开出错");
    		});
    

    fileapi.js里边具体代码如下:

    	/**
    		 *   fileEntry 
    		 *     fullPath: "/test"
    		 *     name: "test"
    		 *     toURL():"filesystem:http://192.168.1.49:8080/temporary/test"
    		 *     
    		 *   浏览本地文件需要传url为 toURL之后的  
    		 */
    		browse:function(url,fileName, option){
    			var dtd = $.Deferred();
    			var self = this;
    			if(Browser.isX5App){
    				if(this._isLocalFile(url)){
    					if(Browser.isAndroid){
    						window.open(url,"_system");
    						dtd.resolve(url);
    					}else if(Browser.isIOS){
    						window.open(url, '_blank', 'toolbarposition=top,location=no,enableViewportScale=yes');
    						dtd.resolve(url);
    					}
    				}else{
    					url = this._toFullUrl(url);
    					/*this.download(url, fileName,option).done(function(nativeUrl){
    						self.browse(nativeUrl).done(function(url){
    							dtd.resolve(url);
    						}).fail(function(err){
    							dtd.reject(err);
    						});
    					}).fail(function(err){
    						dtd.reject(err);
    					});*/
    					plugins.toast.showShortBottom("正在载入文件,请稍候。。。。");
    					handleDocumentWithURL(function(){
    						dtd.resolve(url);
    					},function(err){
    						dtd.reject(err);
    					},url);
    				}
    			}else{
    				//TODO:支持浏览器中filesystem的文件浏览
    				if(justep.Browser.isWeChat){
    					var fileBrowseNode = $('<div style="z-index:9999;position:absolute;top:0;bottom:0;left:0;right:0;background-color:white;"></div>');
    					var closeBtn = $('<i class="icon-chevron-left" style="position:absolute;z-index:3;left:25px;width:50px;top:10px;height:36px;"/>').on('click',function(){
    						fileBrowseNode.remove();
    					}).appendTo(fileBrowseNode);
    					var fileFrame = $('<iframe src="'+url+'" style="width:100%;height:100%;padding-top:46px;position:absolute;background-color:white;border:none;"></iframe>').appendTo(fileBrowseNode);
    					fileBrowseNode.appendTo('body');
    					dtd.resolve(url);
    				}else{
    					window.open(url, '_blank');
    					dtd.resolve(url);
    				}
    			}
    			return dtd.promise();
    		},
    

    我们来看看handleDocumentWithURL方法的具体实现:
    在这里插入图片描述
    这里其实调用了java代码,我只截取部分:

    private class FileDownloaderAsyncTask extends AsyncTask<Void, Void, File> {
    
    		private final CallbackContext callbackContext;
    		private final String url;
    
    		public FileDownloaderAsyncTask(CallbackContext callbackContext,
    																	 String url) {
    			super();
    			this.callbackContext = callbackContext;
    			this.url = url;
    		}
    
    		@Override
    		protected File doInBackground(Void... arg0) {
    			return downloadFile(url, callbackContext);
    		}
    
    		@Override
    		protected void onPostExecute(File result) {
    			if (result == null) {
    				// case has already been handled
    				return;
    			}
    
    			Context context = cordova.getActivity().getApplicationContext();
    
    			// get mime type of file data
    			String mimeType = getMimeType(result.getAbsolutePath());
    			if (mimeType == null) {
    				callbackContext.error(ERROR_UNKNOWN_ERROR);
    				return;
    			}
    
    			// start an intent with the file
    			try {
    				Intent intent = new Intent(Intent.ACTION_VIEW);
    				intent.setDataAndType(Uri.fromFile(result), mimeType);
    				intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
    				context.startActivity(intent);
    
    				callbackContext.success(); // Thread-safe.
    			} catch (ActivityNotFoundException e) {
    				// happens when we start intent without something that can
    				// handle it
    				e.printStackTrace();
    				callbackContext.error(ERROR_NO_HANDLER_FOR_DATA_TYPE);
    			}
    
    		}
    	}
    

    出问题的代码在哪里呢?就是下边这段代码,其实代码本身没有什么问题,主要问题还是从android N (24)开始,打开一些特殊位置的文件是需要权限的,具体的就是FileProvider的配置使用,有兴趣的朋友可以去看看。

    在这里插入图片描述
    照理说,我们打开的是网络文件,为什么会调用的打开本地文件的方法,这还要继续看代码,首先是downloadfile,其实这里边使用了AsyncTask去异步下载了文件,具体如下:

    public FileDownloaderAsyncTask(CallbackContext callbackContext, String url) {
    			super();
    			this.callbackContext = callbackContext;
    			this.url = url;
    		}
    
    //下载文件
    		@Override
    		protected File doInBackground(Void... arg0) {
    			return downloadFile(url, callbackContext);
    		}
    		......
    			
    	}
    

    具体下载代码如下:

    /**
    	 * downloads a file from the given url to external storage.
    	 *
    	 * @param url
    	 * @return
    	 */
    	private File downloadFile(String url, CallbackContext callbackContext) {
    
    		try {
    			// get an instance of a cookie manager since it has access to our
    			// auth cookie
    			CookieManager cookieManager = CookieManager.getInstance();
    
    			// get the cookie string for the site.
    			String auth = null;
    			if (cookieManager.getCookie(url) != null) {
    				auth = cookieManager.getCookie(url).toString();
    			}
    
    			URL url2 = new URL(url);
    			HttpURLConnection conn = (HttpURLConnection) url2.openConnection();
    
    			if (auth != null) {
    				conn.setRequestProperty("Cookie", auth);
    			}
    
    			InputStream reader = conn.getInputStream();
    
    			String extension = this.getExtension(url,conn);
    
    			//File f = File.createTempFile(FILE_PREFIX, "." + extension,null);//原代码
    			//change by pk先获取外部存储缓存路径,如果不存在,则使用内部存储缓存路径
    			File targetFile = null;
    			Context context = cordova.getActivity().getApplicationContext();
    			File targetPath = new File(context.getExternalCacheDir().getAbsolutePath());
    			if(judeDirExists(targetPath)){
    				targetFile = new File(context.getExternalCacheDir().getAbsolutePath() + "/temp/");
    			}else{
    				targetFile = new File(context.getCacheDir().getAbsolutePath() + "/temp/");
    			}
    			if (!targetFile.exists()) {
    				targetFile.mkdir();
    			}
    			File f = File.createTempFile(FILE_PREFIX, "." + extension,targetFile);
    			// make sure the receiving app can read this file
    			f.setReadable(true, false);
    			FileOutputStream outStream = new FileOutputStream(f);
    
    			byte[] buffer = new byte[1024];
    			int readBytes = reader.read(buffer);
    			while (readBytes > 0) {
    				outStream.write(buffer, 0, readBytes);
    				readBytes = reader.read(buffer);
    			}
    			reader.close();
    			outStream.close();
    			return f;
    
    		} catch (FileNotFoundException e) {
    			e.printStackTrace();
    			callbackContext.error(ERROR_FILE_NOT_FOUND);
    			return null;
    		} catch (IOException e) {
    			e.printStackTrace();
    			callbackContext.error(ERROR_UNKNOWN_ERROR);
    			return null;
    		}
    	}
    

    这里使用的targetFile的路径其实就是我们真正打开的路径,只是这里我们已经不能直接访问了,这里访问会报一个异常:

    android.os.FileUriExposedException: file:///storage/emulated/0/Android/data/XXX/cache/temp/DH_5675987974107900719.pdf exposed beyond app through Intent.getData()

    这个异常其实就是因为android系统问题导致的,具体怎么处理呢?我们继续看,其实处理起来无非两种方法:

    • 升级cordova插件,使其具备访问特殊文件夹的权限,但是这种方法很麻烦,因为官方未给出升级的方法,这里不推荐这种方法。
    • 还有一种方法就是不用这个工具打开,那我用哪个呢?用cordova.plugins.disusered.open()这个方法,具体操作如下:
    	var fileTransfer = new FileTransfer(); 
    		//这个路径是当前程序的缓存路径,会被不定期清理
    		var fileURL = cordova.file.externalCacheDirectory;
    		//url 是网络上文件的地址
    		var uri = encodeURI(url);
    		// 本地保存路径
    		var filePath = fileURL + "/"+fileName;
    		var fileUrl=encodeURI(filePath);
    
    		//首先下载到本地
    		fileTransfer.download(uri,fileUrl,
    				function(entry) {
    			//然后用插件打开
    			cordova.plugins.disusered.open(filePath, function(suc){
    				plugins.toast.showShortBottom("正在打开文件,请稍候。。。。");
    			}, function(err){
    				plugins.toast.showShortBottom("打开文件出错");
    			});},
    				function(entry) {plugins.toast.showShortBottom("下载失败");},false);
    

    通过这种处理就可以再次实现预览,不过是通过第三方工具实现预览,算是一种折中的方案吧!
    最后,希望这篇文章对你有所帮助,另外,本人经验有限,错误的地方希望各位指正!

    展开全文
  • 今天项目中遇到这样一个需求 ,根据后台接口里pdf,doc,dwg文档的地址 是一个URL ,需要根据文档的url 下载到本地(内部存储或内存卡)并用手机中能打开该文档的软件弹出来并打开,(这里需要做一个缓存,第一次查看这个文档...
  • Android手机忘记锁屏密码怎么办除重新刷包或者wipe data外还可用adb来删除密码 步骤 1手机连接电脑不打开数据连接在充电模式下进行 2在电脑上解压adb.zip后把adb文件放在电脑C盘根目录下 3进行图中操作删除.key文件 ...
  • 确实,我正在使用我的应用程序打开不同类型(pdf,doc,txt,jpg,…)的用户安全文件,因此我正在使用用户手机上的外部应用程序打开它们.但是我的问题在这里,因为要让另一个应用程序打开这些文件,我需要为要使用的应用程序...

    我正在做一个安全的应用程序,用户可以在其中浏览某些文件,并使用手机上显示的应用程序打开它们.所以就目前而言,我的应用程序确实很安全,文件已经很好地加密,但是我有一个重大的中断.确实,我正在使用我的应用程序打开不同类型(pdf,doc,txt,jpg,…)的用户安全文件,因此我正在使用用户手机上的外部应用程序打开它们.但是我的问题在这里,因为要让另一个应用程序打开这些文件,我需要为要使用的应用程序提供一个Android存储位置.

    这是我现在正在使用的代码:

    Intent intent = new Intent();

    intent.setAction(android.content.Intent.ACTION_VIEW);

    File fileToOpen = new File(activity.getExternalCacheDir().getAbsolutePath() +

    "/" + fileName);

    MimeTypeMap mime = MimeTypeMap.getSingleton();

    String extension = fileToOpen.getName().substring(

    fileToOpen.getName().lastIndexOf(".") + 1);

    String type = mime.getMimeTypeFromExtension(extension);

    intent.setAction(Intent.ACTION_VIEW);

    intent.setDataAndType(Uri.fromFile(fileToOpen), type);

    Manager.getActivity().startActivityForResult(intent,

    ExplorerActivity.FILE_CLOSED_SUCCESSFULLY);

    因此,正如您在我的代码中所看到的,我需要将我的真实文件存储到缓存目录中以将其打开,因此,如果小偷可以访问用户电话,它可以打开存在于此目录中的真实文件,因此我的应用程序是不再安全了.

    当然,我将在用户关闭该文件并将其加密后立即删除该普通文件,但是删除并不意味着该文件已从手机中完全删除.在删除之前,我用一些空字节重写,但这不足以确保此文件的安全.

    因此,现在,我要从您那里得到的是实现我想要做的一个主意:打开文件而不将其存储到Android硬盘中.

    这是我的一些线索:

    >用我自己的应用程序打开文件(但是要实现很多,因为文件类型太多,我真的不喜欢开发已经存在的文件)

    >找到一个解决方案来打开文件而不将其存储在我的应用程序外部(我的意思是直接使用该文件的字节数组打开文件)

    >将文件存储到手机RAM中(我不知道是否可能)

    因此,这不是一个详尽无遗的清单,任何其他建议将不胜感激.并且,如果您可以提供有关我提出的一种解决方案的帮助,请不要犹豫.不要犹豫,告诉我我的想法之一是完全不可能的还是错误的.

    展开全文
  • 目前最新版本(官网最新43903版本SDK)仅支持本地文件查看 配置: 1、gradle中引入(使用此方法...//X5兼容64位手机 ndk { abiFilters "armeabi", "armeabi-v7a", "x86", "mips" } 3、在你的Application 的onCre.

    目前最新版本(官网最新43903版本SDK)仅支持本地文件查看

    测试Demo:https://download.csdn.net/download/jifenglie/12510710

    腾讯TBS初始化失败,加载失败问题 : https://blog.csdn.net/jifenglie/article/details/106669723

     

    配置:

    1、gradle中引入(使用此方法,不需要在去官网下载SDK,也不需要下载SO文件)

    implementation 'com.tencent.tbs.tbssdk:sdk:43903'
    

    2、在gradle中配置 ndk

    //X5兼容64位手机
    ndk {
        abiFilters "armeabi", "armeabi-v7a", "x86", "mips"
    }

     

    3、在你的Application 的onCreate 方法中初始化:

    //初始化X5内核
    QbSdk.initX5Environment(this, new QbSdk.PreInitCallback() {
        @Override
        public void onCoreInitFinished() {
            //x5内核初始化完成回调接口,此接口回调并表示已经加载起来了x5,有可能特殊情况下x5内核加载失败,切换到系统内核。
    
        }
    
        @Override
        public void onViewInitFinished(boolean b) {
            //x5內核初始化完成的回调,为true表示x5内核加载成功,否则表示x5内核加载失败,会自动切换到系统内核。
            Log.e("@@","加载内核是否成功:"+b);
        }
    });

    使用:

    1、本地文件存在,直接使用TbsReaderView打开:

    private String tbsReaderTemp = Environment.getExternalStorageDirectory() + "/TbsReaderTemp";
    
    private void displayFile(String filePath, String fileName) {
         //增加下面一句解决没有TbsReaderTemp文件夹存在导致加载文件失败
         String bsReaderTemp = tbsReaderTemp;
         File bsReaderTempFile = new File(bsReaderTemp);
         if (!bsReaderTempFile.exists()) {
             Log.d("print", "准备创建/TbsReaderTemp!!");
             boolean mkdir = bsReaderTempFile.mkdir();
             if (!mkdir) {
                 Log.d("print", "创建/TbsReaderTemp失败!!!!!");
             }
         }
         Bundle bundle = new Bundle();
         Log.d("print", "filePath" + filePath);//可能是路径错误
         Log.d("print", "tempPath" + tbsReaderTemp);
         bundle.putString("filePath", filePath);
         bundle.putString("tempPath", tbsReaderTemp);
         boolean result = mTbsReaderView.preOpen(getFileType(fileName), false);
         Log.d("print", "查看文档---" + result);
         if (result) {
             mTbsReaderView.openFile(bundle);
         } else {
    
         }
     }

    2、文件不存在去下载

    OkGo.get(docUrl)//
            .tag(this)//
            .execute(new FileCallback(download, docName) {  //文件下载时,可以指定下载的文件目录download和文件名docName
                @Override
                public void onSuccess(File file, Call call, Response response) {
                    // file 即为文件数据,文件保存在指定目录
                    Log.d("print", "下载文件成功");
                    displayFile(download + file.getName(), file.getName());
                    Log.d("print", "" + file.getName());
                }
    
                @Override
                public void downloadProgress(long currentSize, long totalSize, float progress, long networkSpeed) {
                    //这里回调下载进度(该回调在主线程,可以直接更新ui)
                    Log.d("print", "总大小---" + totalSize + "---文件下载进度---" + progress);
                }
            });

     

     

    完整的展示pdf文件的代码:

    import android.content.Intent;
    import android.os.Bundle;
    import android.os.Environment;
    import android.support.v7.app.AppCompatActivity;
    import android.text.TextUtils;
    import android.util.Log;
    import android.widget.RelativeLayout;
    
    import com.lzy.okgo.OkGo;
    import com.lzy.okgo.callback.FileCallback;
    import com.tencent.smtt.sdk.TbsReaderView;
    
    import java.io.File;
    
    import okhttp3.Call;
    import okhttp3.Response;
    
    public class TbsActivity extends AppCompatActivity implements TbsReaderView.ReaderCallback {
    
        RelativeLayout mRelativeLayout;
        private TbsReaderView mTbsReaderView;
        //    private String docUrl = "/test\\/WD802-8.doc";
    //    private String docUrl = "/test\\/安卓类库整理20190125.xlsx";
    //    private String docUrl = "/test\\/登录.pdf";
        private String docUrl = "/test\\/新个人所得税法扣缴及六项专项附加扣除操作指引.ppt";
    //    private String docUrl = "/test\\/接口需求0327.docx";
    
    
    //    private String docUrl = "http:\\/\\/zyweike.cdn.bcebos.com\\/zyweike\\/ep1\\/2018\\/04\\/02\\/周末加班统计.xlsx";
    
    
        private String download = Environment.getExternalStorageDirectory() + "/download/test/document/";
    
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_tbs);
            mTbsReaderView = new TbsReaderView(this, this);
            mRelativeLayout = findViewById(R.id.tbsView);
            mRelativeLayout.addView(mTbsReaderView, new RelativeLayout.LayoutParams(-1, -1));
    
            Intent intent = getIntent();
            String data = intent.getStringExtra("type");
            if ("1".equals(data)) {
                this.docUrl = "/test\\\\/WD802-8.doc";
            } else if ("2".equals(data)) {
                docUrl = "/test\\\\/接口需求0327.docx";
            }else if("3".equals(data)){
                docUrl = "/test\\\\/登录.pdf";
            }else if("4".equals(data)){
                docUrl = "/test\\\\/安卓类库整理20190125.xlsx";
            } else if ("5".equals(data)) {
                docUrl = "/test\\/新个人所得税法扣缴及六项专项附加扣除操作指引.ppt";
            }
    
            initDoc();
        }
    
        private void initDoc() {
            int i = docUrl.lastIndexOf("/");
            String docName = docUrl.substring(i, docUrl.length());
            Log.d("print", "---substring---" + docName);
    
    //        String[] split = docUrl.split("\\/");
    //        String s = split[split.length - 4] + split[split.length - 3] + split[split.length - 2] + split[split.length - 1];
    //        Log.d("print", "截取带时间---" + s);
            //判断是否在本地/[下载/直接打开]
            File docFile = new File(download, docName);
            if (docFile.exists()) {
                //存在本地;
                Log.d("print", "本地存在");
                displayFile(docFile.toString(), docName);
            } else {
                OkGo.get(docUrl)//
                        .tag(this)//
                        .execute(new FileCallback(download, docName) {  //文件下载时,可以指定下载的文件目录和文件名
                            @Override
                            public void onSuccess(File file, Call call, Response response) {
                                // file 即为文件数据,文件保存在指定目录
                                Log.d("print", "下载文件成功");
                                displayFile(download + file.getName(), file.getName());
                                Log.d("print", "" + file.getName());
                            }
    
                            @Override
                            public void downloadProgress(long currentSize, long totalSize, float progress, long networkSpeed) {
                                //这里回调下载进度(该回调在主线程,可以直接更新ui)
                                Log.d("print", "总大小---" + totalSize + "---文件下载进度---" + progress);
                            }
                        });
            }
    
        }
    
        private String tbsReaderTemp = Environment.getExternalStorageDirectory() + "/TbsReaderTemp";
    
        private void displayFile(String filePath, String fileName) {
    
            //增加下面一句解决没有TbsReaderTemp文件夹存在导致加载文件失败
            String bsReaderTemp = tbsReaderTemp;
            File bsReaderTempFile = new File(bsReaderTemp);
            if (!bsReaderTempFile.exists()) {
                Log.d("print", "准备创建/TbsReaderTemp!!");
                boolean mkdir = bsReaderTempFile.mkdir();
                if (!mkdir) {
                    Log.d("print", "创建/TbsReaderTemp失败!!!!!");
                }
            }
            Bundle bundle = new Bundle();
       /*   1.TbsReader: Set reader view exception:Cannot add a null child view to a ViewGroup
            TbsReaderView: OpenFile failed! [可能是文件的路径错误]*/
       /*   2.插件加载失败
            so文件不支持;*/
       /*
       ndk {
                //设置支持的SO库架构  'arm64-v8a',
                abiFilters 'armeabi', "armeabi-v7a",  'x86'
            } */
       /*
            3.自适应大小
    
        */
            Log.d("print", "filePath" + filePath);//可能是路径错误
            Log.d("print", "tempPath" + tbsReaderTemp);
            bundle.putString("filePath", filePath);
            bundle.putString("tempPath", tbsReaderTemp);
            boolean result = mTbsReaderView.preOpen(getFileType(fileName), false);
            Log.d("print", "查看文档---" + result);
            if (result) {
                mTbsReaderView.openFile(bundle);
            } else {
    
            }
        }
    
        private String getFileType(String paramString) {
            String str = "";
            if (TextUtils.isEmpty(paramString)) {
                Log.d("print", "paramString---->null");
                return str;
            }
            Log.d("print", "paramString:" + paramString);
            int i = paramString.lastIndexOf('.');
            if (i <= -1) {
                Log.d("print", "i <= -1");
                return str;
            }
            str = paramString.substring(i + 1);
            Log.d("print", "paramString.substring(i + 1)------>" + str);
            return str;
        }
    
        @Override
        public void onCallBackAction(Integer integer, Object o, Object o1) {
    
        }
    
        @Override
        protected void onDestroy() {
            super.onDestroy();
            mTbsReaderView.onStop();
        }
    }
    
    activity_tbs.xml
    <?xml version="1.0" encoding="utf-8"?>
    <android.support.constraint.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent">
    
    <RelativeLayout
        android:id="@+id/tbsView"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        app:layout_constraintRight_toRightOf="parent"
        app:layout_constraintLeft_toLeftOf="parent"
        app:layout_constraintTop_toTopOf="parent"
        app:layout_constraintBottom_toBottomOf="parent"
        >
    
    </RelativeLayout>
    
    </android.support.constraint.ConstraintLayout>
    

     

    测试Demo:https://download.csdn.net/download/jifenglie/12510710

    腾讯TBS初始化失败,加载失败问题 : https://blog.csdn.net/jifenglie/article/details/106669723

    展开全文
  • 默认情况,Windows并不支持.docx,.pptx,.xlsx文件类型的搜索的,你...链接: https://pan.baidu.com/s/19WroIC5ukaH01IuxYYpeOg 提取码: vh9g 复制这段内容后打开百度网盘手机App,操作更方便哦 如果还没有效果,就去

    默认情况,Windows并不支持.docx,.pptx,.xlsx文件类型的搜索的,你可能需要手工安装office的筛选器,从而支持以上类型文件的搜索。
    网上搜索“office 2010 筛选器包” Microsoft Filter Pack 软件,下载并安装,就可以搜索上述类型文件的内容了。
    下面网盘地址也可以

    链接: https://pan.baidu.com/s/19WroIC5ukaH01IuxYYpeOg 提取码: vh9g 复制这段内容后打开百度网盘手机App,操作更方便哦

    如果还没有效果,就去重置索引

    win10重置搜索文件索引的方法

    展开全文
  • 微信小程序下载文件wx.downloadFile接口下载的文件是下载到微信...获取文件临时路径或缓存路径后调用wx.openDocument可以打开下载的文件,需要打开的文件格式也有限制,只能打开doc、docx、xls、xlsx、ppt、pptx、...
  • 3.支持 doc docx ppt pptx xls xlsx mp3 mp4 txt 等等文件格式的打开,支持世界上所有文件。 4.加密功能能够安全保护用户文件。 5.支持多选,批量复制 批量剪切,批量删除 批量导出 批量分享等功能。 一键批量压缩...
  • 在项目中利用poi3.8根据模板生成doc文件,其中遇到了问题:根据含有表格或者图片模板文件,新生成的doc文件打开后是空白的,没显示任何的内容,也没报错,但是在没有表格和图片的基础上是正常显示的。请问各位大神有...
  • 前言:最近公司某些部门到一线检查,对...如果要做的更好一点,程序量就大了,比如打开后搜索是否有敏感字,如用户名、11位的手机号码、8位的固定电话、家庭地址等,逻辑复杂度就会很大很大,我是做不到,只能做一...
  • 3.将xml后缀的文件后缀改成.ftl 4.将ftl中需要替换的内容使用freemaker jstl语法进行替换 5.使用如下代码进行下载 注意:后缀一定得是.doc public static File createWord(HttpServletResponse response,Map ...
  • 1.要有该手机驱动,并且要有...3.打开doc界面,开始—>运行,输入cmd 4.在doc界面后,进入到tools路径,如图: 5.到tools路径下,然后就可以输入adb install + 文件名,安装你所要安装的文件了,如图: 显示Success则
  • 1 一标准 非WIFI下不能静默拉取大于200kb的资源静默拉取指打开某个页面UI展示完成后还有流量消耗 是否存在资源的重复拉取 被动接收富媒体消耗(富媒体包括图片表情语音文件) 检查大于10kb的资源需做增量拉取 定时...
  • IOS流量测试方法简述 一 流量测试 1 硬件 1 越狱的iPhone手机或ipad 2数据线 2 软件 1 在pc上安装itools软件开启ssh和提取tcpdump记录文件时使用 2 在cydia中安装network-cmdsOpenSSHtcpdump 3 在pc上安装putty 4 在...
  • 一般都会集成Umeng的分享,基本的分享都可以满足,但是要想分享文件,比如pdf、doc、ppt等类型时,umeng就不能满足需求了,此时可以考虑调用系统分享,其实称为手机中可打开文件的软件更为合适; 打开文件管理器 ...
  • 然而,这个doc文件是xml格式的,部分手机上无法打开正常阅读。本文所要说的是如何生成在手机上可以查看的docx文件以及在其中增加图片。 继续刚才的操作,在word中保存为xml格式的同时保存为docx格式备用。使用文本...
  • java读取 doc、ppt、excel

    2012-03-20 10:28:30
    由于项目是面向手机客户端webview的,而常常出现附件格式为doc、ppt、excel、pdf等,Iphone再打开这些附件效果还算可以,但是android上的就根本不行,得依赖第三方工具 曾尝试用poi读取这些文件然后转为html,但再...
  • 打开Pipeline State页签 找到Shader,并Edit 调试只能刷新一下 通过RenderDoc的UI,可知道一些资讯(官方文档,也重要,知道可自定义Visual Shader,抛砖引玉) GLSL的文件需要包含main()这个方法,而返回...
  • 应用安装 Android应用程序安装方法 APK是AndroidPackage的缩写即Android安装包(apkAPK是类似windows下的exe文件格式 通过将APK文件直接传到 或Android手机执行即可安装 APK安装方法 1.浏览器下载安装 直接的浏览器中...
  • Android 在线预览文件

    2021-05-11 09:43:09
    1,先下载本地,再用手机自带第三方app打开,下次预览直接预览本地已下载文件 //okhttp下载文件 DownLoadManager.instance!!.load( fileUrl, 2, object : ProgressCallBack<ResponseBody>(destFi
  • 从网络下载文件,并且在手机上显示,文件类型目前有doc,docx,pdf,txt 当然小伙伴们可以自行添加,这里用的是android Intent跳转方式解决,主要通过intent找到可以打开的软件,进行阅读。 此时,有人要问了,图...
  • 我们在工作生活中经常需要发送各种doc,pdf等文件,如果文件较大,对于接收方来说也有一定下载时间,并且我个人而言,经常接收大量只读的文件,最后导致手机中产生了许多垃圾文件,需要自己手动清理,实际上我们可以...
  • 自己创建的word在手机上是可以打开的。  模板本身就是XML格式文件,freemarker使用的方式是用类型字符串替换的方式,替换掉XML里面的字符然后生成按相同格式生成文件,然后后缀名定为.doc而已。  由于X...
  • 入门学习Linux常用必会60个命令实例详解doc/txt

    千次下载 热门讨论 2011-06-09 00:08:45
    文件doc版,可自行转成txt,在手机上看挺好的。 本资源来自网络,如有纰漏还请告知,如觉得还不错,请留言告知后来人,谢谢!!!!! 入门学习Linux常用必会60个命令实例详解 Linux必学的60个命令 Linux提供...
  • 补充:freemarker生成的文档其实是xml格式的doc文档(将该doc文档用editplus打开,显示的内容是xml格式的,普通的doc文档用editplus打开是乱码) freemarker生成word时,有没有属性可以设置生成的word为非xml格式的...
  • 题目要求: 1、 在你的计算机上安装Fiddler并...4、完成开始表格.doc文件 一、安装Fiddler 1、Fiddler下载地址:http://download.csdn.net/detail/shaynerain/9707066 2、下载完成后打开安装包,按照提示安装 ...
  • 毫无疑问支持.doc和.docx的只有POI ...复制这段内容后打开百度网盘手机App,操作更方便哦 /** * 读取txt文件 * * @param filepath 本地txt或log文件 * @return 返回读取到的文件内容 */ public
  • BIGEMAP手机端使用说明

    千次阅读 2019-07-05 16:53:46
    安卓手机版下载地址:http://www.bigemap.com/helps/doc20180409104.html 在左侧有个按钮,点击后出现抽屉:标注图层 在抽屉的底部有一个保存按钮,点击将保存当前选中的kml对象 下图为kml文件中的图元...
  • 可以作为移动办公的最小载体而随时随地编辑公文,用手机收到的邮件附件为Office文档的,也可以随时打开来查看编辑了! 软件特点: 1、Quickoffice可以在Office 2007 Excel电子制表软件中浏览,以及进行实时的表格重...

空空如也

空空如也

1 2 3 4 5
收藏数 83
精华内容 33
关键字:

手机打开doc文件