在android手机中打开word、xls、pd…

今天研究了下在如何在应用中打开word、xls、ppt等office文件,分为网络加载观看和本地观看,参考了豆丁阅读客户端和百度文库客户端。
1、本地:发现两个客户端在本地的时候都是使用金山Office手机客户端作为打开office文件的工具,因为开始使用的时候我手机上是装着金山Office的,因为之前用过金山Office,所以觉着这两个客户端的界面很像,又联想了一下发现都是金山Office的界面,如果手机上没有装金山Office的话,两个应用都会引导去下载安装金山Office应用。后来发现 http://bbs.wps.cn/forum.php?mod=viewthread&tid=22349340,金山的官方论坛上有给出自己的包名以及阅读所使用的activity信息。
2、在线观看:百度文库的在线观看猜想就是一个listview,如果是doc的话,就由服务器返回一页一页的数据,看一页请求一页,如果是pdf的话就由服务器返回一张一张的图片,一个listview的item装一张图片,ppt亦然。

写了个小demo,好像没法传附件,直接贴代码。功能是列出内存卡中的doc和pdf,然后打开金山Office查看,如果没有装金山Office的话,引导你去下载安装,两个类,功能简单就不贴图了。

package com.example.wordtest;

import java.io.File;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;

import android.app.Activity;
import android.app.ProgressDialog;
import android.content.ActivityNotFoundExceptio n;
import android.content.Intent;
import android.content.pm.ApplicationInfo;
import android.content.pm.PackageInfo;
import android.content.pm.PackageManager;
import android.content.pm.PermissionInfo;
import android.net.Uri;
import android.os.Bundle;
import android.os.Environment;
import android.os.Handler;
import android.os.Message;
import android.view.KeyEvent;
import android.view.View;
import android.widget.AdapterView;
import android.widget.AdapterView.OnItemClickListener;
import android.widget.ListView;
import android.widget.SimpleAdapter;
import android.widget.Toast;

public class WordReadActivity extends Activity {
// 下载成功
public static final int DOWNLOAD_ERROR = 7;
// 下载失败
public static final int DOWNLOAD_SUCCESS = 6;
private ListView listV = null;
private List<File> list = null;
private int a[] = { R.drawable.folder, R.drawable.word, R.drawable.pdf };
private ArrayList<HashMap<String, Object>> recordItem;
private boolean isInstall = false;

private File PresentFile;

@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
listV = (ListView) this.findViewById(R.id.list);
list_files();
}

private void list_files() {
File path = android.os.Environment.getExternalStorageDirect ory();
PresentFile = path;
File[] file = path.listFiles();
fill(file);
}

@Override
protected void onResume() {
isInstall = false;
isInstall();
super.onResume();
}
private void fill(File[] file) {
SimpleAdapter adapter = null;
recordItem = new ArrayList<HashMap<String, Object>>();
list = new ArrayList<File>();
for (File f : file) {
if (Invalid(f) == 2) {
list.add(f);
HashMap<String, Object> map = new HashMap<String, Object>();
map.put("picture", a[2]);
map.put("name", f.getName());
recordItem.add(map);
}
if (Invalid(f) == 1) {
list.add(f);
HashMap<String, Object> map = new HashMap<String, Object>();
map.put("picture", a[1]);
map.put("name", f.getName());
recordItem.add(map);
}
if (Invalid(f) == 0) {
list.add(f);
HashMap<String, Object> map = new HashMap<String, Object>();
map.put("picture", a[0]);
map.put("name", f.getName());
recordItem.add(map);
}
}
adapter = new SimpleAdapter(this, recordItem, R.layout.item,
new String[] { "picture", "name" }, new int[] { R.id.picture,
R.id.text });
listV.setAdapter(adapter);
listV.setAdapter(adapter);
listV.setOnItemClickListener(new Clicker());
}

private int Invalid(File f) {
if (f.isDirectory()) {
return 0;
} else {
String filename = f.getName().toLowerCase();
if (filename.endsWith(".doc")) {
return 1;
} else if (filename.endsWith(".pdf")) {
return 2;
}
return 3;
}
}

Handler handler = new Handler() {
public void handleMessage(android.os.Message msg) {
switch (msg.what) {
case DOWNLOAD_SUCCESS:
// 下载成功
File file = (File) msg.obj;
Intent intent = new Intent();
intent.setAction("android.intent.action.VIEW");
intent.addCategory("android.intent.category.DEFAULT");
intent.setDataAndType(Uri.fromFile(file),
"application/vnd.android.package-archive");
startActivity(intent);
break;
case DOWNLOAD_ERROR:
// 下载失败
break;
default:
break;
}
}

};

private class Clicker implements OnItemClickListener {
private ProgressDialog mProgressDialog;

public void onItemClick(AdapterView<?> arg0, View arg1, int arg2,
long arg3) {
File file = list.get(arg2);
PresentFile = file;
if (file.isDirectory()) {
File[] files = file.listFiles();
fill(files);
} else {
if (isInstall) {
Intent intent = new Intent();
intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
intent.setAction(android.content.Intent.ACTION_VIEW);
intent.setClassName("cn.wps.moffice_eng",
"cn.wps.moffice.documentmanager.PreStartActivity");
Uri uri = Uri.fromFile(file);
System.out.println(uri);
intent.setData(uri);
try {
startActivity(intent);
} catch (ActivityNotFoundExceptio n e) {
e.printStackTrace();
}
} else {
System.out.println(Environment.getExternalStorageState());
Toast.makeText(WordReadActivity.this, "开始下载...", 0).show();
mProgressDialog = new ProgressDialog(WordReadActivity.this);
mProgressDialog
.setProgressStyle(ProgressDialog.STYLE_HORIZONTAL);
mProgressDialog.show();

final File file1 = new File(
Environment.getExternalStorageDirect ory(),
DownLoadUtil.getFileName("office" + ".apk"));
new Thread() {
public void run() {
File downloadfile = DownLoadUtil
.downLoad(
"http://kad.www.wps.cn/wps/download/android/kingsoftoffice_2052/moffice_2052_wpscn.apk",
file1.getAbsolutePath(),
mProgressDialog);
Message msg = Message.obtain();
if (downloadfile != null) {
// 下载成功,安装....
msg.obj = downloadfile;
msg.what = DOWNLOAD_SUCCESS;
} else {
// 提示用户下载失败.
msg.what = DOWNLOAD_ERROR;
}
handler.sendMessage(msg);
mProgressDialog.dismiss();
};
}.start();

}
}
}
}

public void isInstall() {

List<PackageInfo> list = getPackageManager().getInstalledPackages(
PackageManager.GET_PERMISSIONS);

StringBuilder stringBuilder = new StringBuilder();

for (PackageInfo packageInfo : list) {
stringBuilder.append("package name:" + packageInfo.packageName
+ "\n");
ApplicationInfo applicationInfo = packageInfo.applicationInfo;
stringBuilder.append("应用名称:"
+ applicationInfo.loadLabel(getPackageManager()) + "\n");
if (packageInfo.permissions != null) {

for (PermissionInfo p : packageInfo.permissions) {
stringBuilder.append("权限包括:" + p.name + "\n");
}
}
stringBuilder.append("\n");
if ("cn.wps.moffice_eng".equals(packageInfo.packageName)) {
isInstall = true;

}
}
System.out.println(isInstall);
}

@Override
public boolean onKeyDown(int keyCode, KeyEvent event) {
if (keyCode == KeyEvent.KEYCODE_BACK) {
if (PresentFile.isDirectory()) {
if (PresentFile.equals(android.os.Environment
.getExternalStorageDirect ory())) {
this.finish();
} else {
PresentFile = PresentFile.getParentFile();
File file = PresentFile;
File[] files = file.listFiles();
fill(files);
}
}
if (PresentFile.isFile()) {
if (PresentFile.getParentFile().isDirectory()) {
PresentFile = PresentFile.getParentFile();
File file = PresentFile;
File[] files = file.listFiles();
fill(files);
}
}
}
return false;
}
}





package com.example.wordtest;

import java.io.File;
import java.io.FileOutputStream;
import java.io.InputStream;
import java.net.HttpURLConnection;
import java.net.URL;

import android.app.ProgressDialog;

public class DownLoadUtil {

public static File downLoad(String serverpath, String savedfilepath,
ProgressDialog pd) {
try {
URL url = new URL(serverpath);
HttpURLConnection conn = (HttpURLConnection) url.openConnection();
conn.setConnectTimeout(5000);
if (conn.getResponseCode() == 200) {
int max = conn.getContentLength();
pd.setMax(max);
InputStream is = conn.getInputStream();
File file = new File(savedfilepath);
if (file.exists()) {
return file;
}
FileOutputStream fos = new FileOutputStream(file);
int len = 0;
byte[] buffer = new byte[1024];
int total = 0;
while ((len = is.read(buffer)) != -1) {
fos.write(buffer, 0, len);
total += len;
pd.setProgress(total);
}
fos.flush();
fos.close();
is.close();
return file;
} else {
return null;
}
} catch (Exception e) {
e.printStackTrace();
return null;
}

}

public static String getFileName(String serverurl) {
return serverurl.substring(serverurl.lastIndexOf("/") + 1);
}
}

layout:
item.xml
<RelativeLayout 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" >

    <ImageView
        android:id="@+id/picture"
        android:layout_width="50dp"
        android:layout_height="50dp" />

    <TextView
        android:id="@+id/text"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_centerVertical="true"
        android:layout_marginLeft="20dp"
        android:layout_toRightOf="@id/picture"
        android:text="text" />

</RelativeLayout>

activity_main.xml
<RelativeLayout 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" >

    <ListView 
        android:id="@+id/list"
        android:layout_height="fill_parent"
        android:layout_width="fill_parent"
        ></ListView>

</RelativeLayout>
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
在 MATLAB 调用 XLS 文件的数据,可以使用以下步骤: 1. 使用 `xlsread` 函数读取 XLS 文件的数据并将其存储在 MATLAB 的变量。例如,假设 XLS 文件名为 `data.xls`,需要读取的工作表名为 `Sheet1`,数据从第2行和第3列开始存储,可以使用以下代码: ``` [num,txt,raw] = xlsread('data.xls', 'Sheet1', 'B2:C10'); ``` 这将读取 `Sheet1` 工作表第2行到第10行、第2列到第3列的数据,并将其存储在名为 `num` 的数值矩阵,存储在名为 `txt` 的文本矩阵,存储在名为 `raw` 的混合矩阵。 2. 对于只包含数值数据的 XLS 文件,可以直接使用 `xlsread` 函数读取数据并存储在数值矩阵。例如,假设 XLS 文件名为 `data.xls`,需要读取的工作表名为 `Sheet1`,数据从第2行和第3列开始存储,可以使用以下代码: ``` num = xlsread('data.xls', 'Sheet1', 'B2:C10'); ``` 这将读取 `Sheet1` 工作表第2行到第10行、第2列到第3列的数据,并将其存储在名为 `num` 的数值矩阵。 3. 对于包含多个工作表的 XLS 文件,可以使用 `xlsfinfo` 函数获取工作表的名称,然后使用 `xlsread` 函数读取指定工作表的数据。例如,假设 XLS 文件名为 `data.xls`,需要读取的工作表名称为 `Sheet1`,可以使用以下代码: ``` [~, sheets] = xlsfinfo('data.xls'); sheetName = 'Sheet1'; for i = 1:length(sheets) if strcmp(sheets{i}, sheetName) data = xlsread('data.xls', sheetName); break; end end ``` 这将读取 XLS 文件所有工作表的名称,查找与指定工作表名称匹配的工作表,并使用 `xlsread` 函数读取该工作表的数据。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值