热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

AndroidFileHelper打开各种类型文件

使用Android系统支持的或者第三方APK打开各种类型的文件原理:根据文件名后缀,判断出文件的类型,如PPTTXTPDF等类型

使用Android系统支持的或者第三方APK打开各种类型的文件

原理:根据文件名后缀,判断出文件的类型,如PPT/TXT/PDF等类型,设置Intent的Data and Type

FileHelper源代码

package com.example.common;import java.io.File;import android.content.Context;
import android.content.Intent;
import android.net.Uri;
import android.text.TextUtils;
import android.util.Log;
import android.widget.Toast;public class FileHelper {private static final String TAG = "FileHelper";public static void openFile(String filePath, Context context){if(TextUtils.isEmpty(filePath)||null == context){Log.e(TAG, "--openFile--filePath is empty or context is null, retun");return;}File file = new File(filePath);if(null != file && file.exists()){String fileName = file.getName();Log.d(TAG, "--file is exist, filePath:"+filePath+"--fileName:"+fileName);String fileType = "*/*";String end = fileName.substring(fileName.lastIndexOf(".") + 1, fileName.length()).toLowerCase();if(end.equals("m4a")||end.equals("mp3")||end.equals("mid")|| end.equals("xmf")||end.equals("ogg")||end.equals("wav")){fileType = "audio/*";}else if(end.equals("jpg")||end.equals("gif")||end.equals("png")||end.equals("jpeg")||end.equals("bmp")||end.equals(".pic")){fileType = "image/*";}else if(end.equals("txt")){fileType = "text/plain";}else if(end.equals("pdf")){fileType = "application/pdf";}else if(end.equals("doc")){fileType = "application/msword";}else if(end.equals("xls")){fileType = "application/vnd.ms-excel";}else if(end.equals("ppt")){fileType = "application/vnd.ms-powerpoint";}// 可以扩展自己需要的类型Log.d(TAG, "--fileType:"+fileType);Intent intent = new Intent();intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);intent.setAction(android.content.Intent.ACTION_VIEW);intent.setDataAndType(Uri.fromFile(file), fileType);try {context.startActivity(intent);} catch (Exception e) {e.printStackTrace();Log.e(TAG, "--can not startActivity--");Toast.makeText(context, "暂不支持打开该文件", Toast.LENGTH_SHORT).show();}}}}

注意点
1. 在使用context.startActivity(intent);使,要加上try catch,不然若不存在打开该类型的应用,则会crash
异常如下:

android.content.ActivityNotFoundException: No Activity found to handle Intent { act=android.intent.action.VIEW dat=file:///sdcard/1.ppt typ=application/vnd.ms-powerpoint flg=0x10000000 }

  1. 该工具类并未判断文件是否真的类型和后缀一致。如“.pic”结尾的文本文件,用系统“图库”打开可能是黑的或者出现异常。
    异常如下:

Caused by: java.lang.NullPointerException: Attempt to invoke virtual method 'java.lang.String com.android.gallery3d.data.Path.getPrefix()' on a null object reference
07-07 16:
08:20.672: E/AndroidRuntime(7816): at com.android.gallery3d.data.DataManager.getDefaultSetOf(DataManager.java:278)
07-07 16:08:20.672: E/AndroidRuntime(7816): at com.android.gallery3d.app.GalleryActivity.startViewAction(GalleryActivity.java:206)
07-07 16:08:20.672: E/AndroidRuntime(7816): at com.android.gallery3d.app.GalleryActivity.initializeByIntent(GalleryActivity.java:96)
07-07 16:08:20.672: E/AndroidRuntime(7816): at com.android.gallery3d.app.GalleryActivity.onCreate(GalleryActivity.java:73)
07-07 16:08:20.672: E/AndroidRuntime(7816): at android.app.Activity.performCreate(Activity.java:5990)
07-07 16:08:20.672: E/AndroidRuntime(7816): at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1106)
07-07 16:08:20.672: E/AndroidRuntime(7816): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2278)
07-07 16:08:20.672: E/AndroidRuntime(7816): ... 10 more
07-07 16:08:20.702: W/ActivityManager(931): Force finishing activity 1 com.android.gallery3d/.app.GalleryActivity


推荐阅读
  • 1011-MarriageCeremoniesPDF(English)StatisticsForumTimeLimit:2second(s)MemoryLimit:32MBYouw ... [详细]
  • 自定义RecyclerView添加EmptyView
    你知道RecyclerView里没有Em ... [详细]
  • 1.背景java.util.concurrent.atomic这个包是非常实用,解决了我们以前自己写一个同步方法来实现类似于自增长字段的问题。在Java语言中,增量操作符(++)不是原子的, ... [详细]
  • Android性能优化检测App卡顿
    在移动APP性能评测-流畅度评测中,我们介绍了如何准确客观评价APP的流畅度,最终采用SM指标来评价应用的流畅度,在知道如何评价流畅度之后 ... [详细]
  • IDEA实用插件Lombok
    LombokLombok是一个可以通过简单的注解形式来帮助我们简化消除一些必须有但显得很臃肿的Java代码的工具,通过使用对应的注解,可以在编译源码的时候生成对应的方法。通常,我们所定义的对象和b ... [详细]
  • 1.什么是hashcode方法?hashcode方法返回对象的哈希码值在应用程序的执行期间,只要对象的equals方法的比较操作所用到的信息没有改变& ... [详细]
  • 2019 年 Firebase 峰会上发布的新功能
    作者FrancisMa,HeadofProductFirebase的使命是帮助移动开发者和Web开发者迈向成功,但考虑到Firebase每个月有超过200万个活跃的应 ... [详细]
  • JavaBean和Map 转换 用反射方法实现
    由于JavaBean(实体类)结构与Map类似,我们可以把JavaBean与Map进行转换 ... [详细]
  • java代码packageaction;importjava.io.IOException;importjava.io.PrintWriter;importjavax.servlet.Serv ... [详细]
  • Android游戏开发:游戏框架的搭建(4)
    6.游戏框架  所有的基础工作做完后,我们最后来探讨一下游戏框架本身。我们看下为了运行我们的游戏,还需要什么样的工作要做:游戏被分为不同的屏幕(screen),每个屏幕执行着相同的任务:判断用户输入, ... [详细]
  • Android开发实现的计时器功能示例
    本文分享了Android开发实现的计时器功能示例,包括效果图、布局和按钮的使用。通过使用Chronometer控件,可以实现计时器功能。该示例适用于Android平台,供开发者参考。 ... [详细]
  • 本文整理了Java中org.gwtbootstrap3.client.ui.Icon.addDomHandler()方法的一些代码示例,展示了Icon.ad ... [详细]
  • 近来有一个需求,是需要在androidjava基础库中插入一些log信息,完成这个工作需要的前置条件有编译好的android源码具体android源码如何编译,这 ... [详细]
  • 向QTextEdit拖放文件的方法及实现步骤
    本文介绍了在使用QTextEdit时如何实现拖放文件的功能,包括相关的方法和实现步骤。通过重写dragEnterEvent和dropEvent函数,并结合QMimeData和QUrl等类,可以轻松实现向QTextEdit拖放文件的功能。详细的代码实现和说明可以参考本文提供的示例代码。 ... [详细]
  • 本文介绍了pack布局管理器在Perl/Tk中的使用方法及注意事项。通过调用pack()方法,可以控制部件在显示窗口中的位置和大小。同时,本文还提到了在使用pack布局管理器时,应注意将部件分组以便在水平和垂直方向上进行堆放。此外,还介绍了使用Frame部件或Toplevel部件来组织部件在窗口内的方法。最后,本文强调了在使用pack布局管理器时,应避免在中间切换到grid布局管理器,以免造成混乱。 ... [详细]
author-avatar
舅舅家123_204
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有