安卓从服务器中下载pdf文件 然后调用第三方软件WPS Office打开
前提: 高版本想使用Uri.fromFile() file://
的形式 需要在onCreate 或init方法中添加下面代码.
// 使高版本可以使用file://
if(Build.VERSION.SDK_INT >= 18){
StrictMode.VmPolicy.Builder builder = new StrictMode.VmPolicy.Builder();
StrictMode.setVmPolicy(builder.build());
builder.detectFileUriExposure();
}
按钮点击事件
//使用说明书
mDatabind.manual.setOnClickListener(v -> {
String ALY_PDF_URL = "https://meter-reading.oss-cn-beijing.aliyuncs.com/leak-detection-pdf/leak-detection-pdf-app" +
"/说明书(软件部分-手机端).pdf";
String Local_PDF_URL = Environment.getExternalStorageDirectory() + "/Download/Browser/供水管网渗漏智能监测终端与管理系统使用说明书(软件部分-手机端).pdf";
ToastUtil.showToast("正在下载使用说明书...");
Download(ALY_PDF_URL,Local_PDF_URL);
ToastUtil.showToast("下载成功");
getSelectWindow(Local_PDF_URL);
});
打开选择窗口
/**
* 打开选择窗口
* @param URL 本地pdf文件存储路径
*/
public void getSelectWindow(String URL){
final String[] arr = {"WPS office"};
AlertDialog.Builder alertBuilder = new AlertDialog.Builder(new ContextThemeWrapper(getActivity(), null));
alertBuilder.setItems(arr, new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialogInterface, int i) {
if (arr[i].equals("WPS office")) {
goWpsOffice(URL);
}
alertDialog.dismiss();
}
});
alertDialog = alertBuilder.create();
Window window = alertDialog.getWindow();
window.setGravity(Gravity.BOTTOM);
alertDialog.show();
}
判断是否存在app
/**
* 判断是否存在app
* @param appName
* @return
*/
public boolean isMobile_spExist(String appName) {
PackageManager manager = getActivity().getPackageManager();
List<PackageInfo> pkgList = manager.getInstalledPackages(0);
for (int i = 0; i < pkgList.size(); i++) {
PackageInfo pI = pkgList.get(i);
if (pI.packageName.equalsIgnoreCase(appName))
return true;
}
return false;
}
调用第三方软件WPS
/**
* 调用第三方软件WPS
*/
private void goWpsOffice( String fileUrl) {
if (isMobile_spExist(WpsModel.PackageName.NORMAL)) {
Intent intent = new Intent(Intent.ACTION_VIEW);
intent.setPackage(WpsModel.PackageName.NORMAL);
intent.addCategory(Intent.CATEGORY_DEFAULT);
//将功能Scheme以URI的方式传入data
Uri uri = Uri.fromFile(new File(fileUrl));
intent.setData(uri);
getActivity().startActivity(intent);
} else {
Uri uri = Uri.parse("market://details?id=cn.wps.moffice_eng");
Intent intent = new Intent(Intent.ACTION_VIEW, uri);
if (intent.resolveActivity(getActivity().getPackageManager()) != null) {
getActivity().startActivity(intent);
}
}
}
从阿里云服务器下载说明书pdf
/**
* 从阿里云服务器下载说明书pdf
* @param path 阿里云pdf路径
* @param Local_PDF_URL 本地手机pdf存储路径
*/
public void Download(final String path, String Local_PDF_URL){
//将用户信息传入服务器
new Thread(){
@Override
public void run() {
super.run();
try {
URL url = new URL(path);
HttpURLConnection httpURLConnection = (HttpURLConnection) url.openConnection();
httpURLConnection.setConnectTimeout(5000);//推荐设置网络延时
httpURLConnection.setReadTimeout(5000);//设置从主机读取数据超时(单位:毫秒)
httpURLConnection.setRequestMethod("GET");
httpURLConnection.setDoInput(true);
httpURLConnection.connect(); //此处必须显式进行连接
//以下同Post
//获取响应的状态码,判断是否请求成功
if(httpURLConnection.getResponseCode()==HttpURLConnection.HTTP_OK){
//获得网络字节输入流对象
InputStream is=httpURLConnection.getInputStream();// 不是操作文件的吗
//建立内存到硬盘的连接
FileOutputStream fos=new FileOutputStream(new File(Local_PDF_URL));
//老三样 写文件
byte[] b=new byte[4 * 1024];
int len=0;
while((len=is.read(b))!=-1){ //先读到内存
fos.write(b, 0, len);
}
fos.flush();
fos.close();
}
}catch (IOException ioe){
}
}
}.start();
}
WpsModel
public class WpsModel {
public static final String OPEN_MODE = "OpenMode";// 打开文件的模式。
public static final String SEND_SAVE_BROAD = "SendSaveBroad";// 文件保存时是否发送广播。
public static final String SEND_CLOSE_BROAD = "SendCloseBroad";// 文件关闭时是否发送广播
public static final String THIRD_PACKAGE = "ThirdPackage";// 第三方的包名,关闭的广播会包含该项。
public static final String CLEAR_BUFFER = "ClearBuffer";// 关闭文件时是否请空临时文件。
public static final String CLEAR_TRACE = "ClearTrace";// 关闭文件时是否删除使用记录。
public static final String CLEAR_FILE = "ClearFile";// 关闭文件时是否删除打开的文件。
public static final String VIEW_PROGRESS = "ViewProgress";// 文件上次查看的进度。
public static final String AUTO_JUMP = "AutoJump";// 是否自动跳转到上次查看的进度。
public static final String SAVE_PATH = "SavePath";// 文件保存路径。
public static final String VIEW_SCALE = "ViewScale";// 文件上次查看的视图的缩放。
public static final String VIEW_SCALE_X = "ViewScrollX";// 文件上次查看的视图的X坐标。
public static final String VIEW_SCALE_Y = "ViewScrollY";// 文件上次查看的视图的Y坐标。
public static final String USER_NAME = "UserName";// 批注的作者。
public static final String HOMEKEY_DOWN = "HomeKeyDown";// 监听home键并发广播
public static final String BACKKEY_DOWN = "BackKeyDown";// 监听back键并发广播
public static final String ENTER_REVISE_MODE = "EnterReviseMode";// 以修订模式打开文档
public static final String CACHE_FILE_INVISIBLE = "CacheFileInvisible";// Wps生成的缓存文件外部是否可见
public class OpenMode {
public static final String NORMAL = "Normal";// 只读模式
public static final String READ_ONLY = "ReadOnly";// 正常模式
public static final String READ_MODE = "ReadMode";// 打开直接进入阅读器模式
// 仅Word、TXT文档支持
public static final String SAVE_ONLY = "SaveOnly";// 保存模式(打开文件,另存,关闭)
// 仅Word、TXT文档支持
}
public class ClassName {
public static final String NORMAL = "cn.wps.moffice.documentmanager.PreStartActivity2";
// 普通版
public static final String ENGLISH = "cn.wps.moffice.documentmanager.PreStartActivity2";
// 英文版
public static final String ENTERPRISE = "cn.wps.moffice.documentmanager.PreStartActivity2";
// 企业版
}
public class PackageName {
public static final String NORMAL = "cn.wps.moffice_eng";// 普通版
public static final String ENGLISH = "cn.wps.moffice_eng";// 英文版
}
public class Reciver {
public static final String ACTION_BACK = "com.kingsoft.writer.back.key.down";// 返回键广播
public static final String ACTION_HOME = "com.kingsoft.writer.home.key.down";// Home键广播
public static final String ACTION_SAVE = "cn.wps.moffice.file.save";// 保存广播
public static final String ACTION_CLOSE = "cn.wps.moffice.file.close";// 关闭文件广播
}
}