美文网首页
Android调用系统选择Word、Excel、PPT、PDF等

Android调用系统选择Word、Excel、PPT、PDF等

作者: 居叶乐 | 来源:发表于2020-01-06 16:30 被阅读0次

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 )

{

//            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获取一个用于打开PDF文件的intent

        public static Intent getPdfIntent(Uri path)

{

//            File file = new File(path);

            Intent intent =new Intent(Intent.ACTION_VIEW);

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

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

intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);

//            Uri photoURI = FileProvider.getUriForFile(MainApplication.getInstance(),

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

            intent.setDataAndType(Path,"application/pdf");

return intent;

}

//android获取一个用于打开文本文件的intent

        public static Intent getTextFileIntent(Uri path)

{

//            File file = new File(path);

            Intent intent =new Intent(Intent.ACTION_VIEW);

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

            intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);

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

//            Uri photoURI = FileProvider.getUriForFile(MainApplication.getInstance(),

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

            intent.setDataAndType(path,"text/plain");

return intent;

}

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

        public static Intent getAudioFileIntent(Uri path)

{

//            File file = new File(path);

            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);

//            Uri uri = Uri.fromFile(file);

            intent.setDataAndType(path,"audio/*");

return intent;

}

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

        public static Intent getVideoFileIntent(Uri path)

{

//            File file = new File(path);

            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);

//            Uri uri = Uri.fromFile(file);

            intent.setDataAndType(Path,"video/*");

return intent;

}

//android获取一个用于打开Word文件的intent

        public static Intent getWordFileIntent(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 photoURI;

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

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

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

//            }else {

//                photoURI=Uri.fromFile(file);

//            }

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

            intent.setDataAndType(path,"application/msword");

return intent;

}

//android获取一个用于打开PPT文件的intent

        public static Intent getPPTFileIntent(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);

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

//            Uri uri = Uri.fromFile(file);

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

return intent;

}

其实最大的的区别就是

 intent.setDataAndType(“”,"");

//音视频需要添加下面的flag

intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);

intent.putExtra("oneshot",0);

intent.putExtra("configchange",0);

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

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

如有兴趣留言探讨。

相关文章

网友评论

      本文标题:Android调用系统选择Word、Excel、PPT、PDF等

      本文链接:https://www.haomeiwen.com/subject/keukactx.html