- 如我所知:关于使用Intent打开各自类型的文件,网上已经有了大把的资料可以查阅。但是比较不幸的是:目前为止,我没有看到一个完整的,独立的,可以直接拿来就用的工具类。于是,结合之前查阅的资料,我对这些做了一个小小的整合,形成了下面的这个打开文件的工具类。
- 代码很少,注释也比较清晰,也没有什么需要理解的地方,就直接上代码了。
`
import java.io.File;
import android.content.Context;
import android.content.Intent;
import android.net.Uri;
import android.support.v4.app.Fragment;
import android.webkit.MimeTypeMap;
import android.widget.Toast;
public class OpenFileUtils {
private OpenFileUtils() {
}
public static void openFile(File file, Context context) {
try {
Intent intent = new Intent();
intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
// 设置intent的Action属性
intent.setAction(Intent.ACTION_VIEW);
// 获取文件file的MIME类型
String fileExtensionFromUrl = MimeTypeMap
.getFileExtensionFromUrl(Uri.fromFile(file).toString());
String mimeTypeFromExtension = MimeTypeMap.getSingleton()
.getMimeTypeFromExtension(fileExtensionFromUrl);
// 设置intent的data和Type属性。
intent.setDataAndType(/* uri */Uri.fromFile(file),
mimeTypeFromExtension);
// 跳转
context.startActivity(intent); // 这里最好try一下,有可能会报错。
// //比如说你的MIME类型是打开邮箱,但是你手机里面没装邮箱客户端,就会报错。
} catch (Exception e) {
vtoast("没有对应的应用", context);
e.printStackTrace();
}
}
public static void openFile(File file, Fragment context) {
try {
Intent intent = new Intent();
intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
// 设置intent的Action属性
intent.setAction(Intent.ACTION_VIEW);
// 获取文件file的MIME类型
String fileExtensionFromUrl = MimeTypeMap
.getFileExtensionFromUrl(Uri.fromFile(file).toString());
String mimeTypeFromExtension = MimeTypeMap.getSingleton()
.getMimeTypeFromExtension(fileExtensionFromUrl);
// 设置intent的data和Type属性。
intent.setDataAndType(/* uri */Uri.fromFile(file),
mimeTypeFromExtension);
// 跳转
context.startActivity(intent); // 这里最好try一下,有可能会报错。
// //比如说你的MIME类型是打开邮箱,但是你手机里面没装邮箱客户端,就会报错。
} catch (Exception e) {
if (context.isAdded())
vtoast("没有对应的应用", context.getActivity());
e.printStackTrace();
}
}
private static void vtoast(final String text, final Context context) {
if ("main".equals(Thread.currentThread().getName())) {
Toast.makeText(context, text, Toast.LENGTH_SHORT).show();
} else {
System.out.println("subThread can't update UI");
}
}
}
`
有任何疑问,请在浏览器地址栏输入: http://www.baidu.com ~.