Android调用系统选择Word、Excel、PPT、PDF等文档并预览所遇到的坑

跳转到选择文件//

Intent intent =new Intent(Intent.ACTION_GET_CONTENT);

intent.setType("*/*");//设置类型,我这里是任意类型,任意后缀的可以这样写。

intent.addCategory(Intent.CATEGORY_OPENABLE);

startActivityForResult(intent,1);

回调//

在onActivityResult方法中处理

回传的intent里面getdata方法拿到的是uri 

直接把uri当做参数处理:

public static Intent getExcelIntent(Uri path )

{

//            File file = new File(path);

            Intent intent =new Intent("android.intent.action.VIEW");

intent.addCategory("android.intent.category.DEFAULT");

intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);

//            Uri exeUri;

//            if(Build.VERSION.SDK_INT>=Build.VERSION_CODES.N){

//                exeUri = FileProvider.getUriForFile(MainApplication.getInstance(),

//                        "xxxx.provide", file);//file即为所要共享的文件的file

//            }else {

//                exeUri=Uri.fromFile(file);

//            }

            intent.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION);//授予临时权限别忘了

//            intent.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION);//授予临时权限别忘了

            intent.setDataAndType(path,"application/vnd.ms-excel");

return intent;

}

我上面注掉的代码是另一种方式,按上面的方式写不需要进行7.0以上的适配,如有兴趣可以尝试下其他方法,但是转过来转过去最终还是需要的uri,何必多此一举呢,直接将uri当参数岂不是更简单?

上面是以excel为例子,下面附上优化过得方法:

//android获取一个用于打开文稿类的intent的方法  

 //android获取一个用于打开File文件的intent
        public static Intent getFileIntent(Uri path,String fileType)
        {

            Intent intent = new Intent("android.intent.action.VIEW");
            intent.addCategory("android.intent.category.DEFAULT");
            intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
            intent.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION);//授予临时权限别忘了
            intent.setDataAndType(path, fileType);
            return intent;
        }

//android获取一个用于打开音频和视频文件的intent

        public static Intent getVideoFileIntent(Uri path,String fileType)

{

            Intent intent =new Intent("android.intent.action.VIEW");

           intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);

           intent.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION);//授予临时权限别忘了

            intent.putExtra("oneshot",0);

            intent.putExtra("configchange",0);

            intent.setDataAndType(path,fileType);

            return intent;

}

 

//常见类型

txt:"text/plain"

word:"application/msword"

ppt:"application/vnd.ms-powerpoint"

excel:"application/vnd.ms-excel"

音频:"audio/*"

视频:"video/*"

//下面这行至关重要,7.0之后得加上,要不然打开失败。

intent.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION);//授予临时权限别忘了

 

如有兴趣留言探讨。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值