美文网首页
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