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);//授予临时权限别忘了
如有兴趣留言探讨。