Android調(diào)用系統(tǒng)選擇Word、Excel靖苇、PPT席噩、PDF等文檔并預(yù)覽所遇到的坑
跳轉(zhuǎn)到選擇文件//
Intent intent =new Intent(Intent.ACTION_GET_CONTENT);
intent.setType("*/*");//設(shè)置類型,我這里是任意類型贤壁,任意后綴的可以這樣寫悼枢。
intent.addCategory(Intent.CATEGORY_OPENABLE);
startActivityForResult(intent,1);
回調(diào)//
在onActivityResult方法中處理
回傳的intent里面getdata方法拿到的是uri?
直接把uri當(dāng)做參數(shù)處理:
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);//授予臨時權(quán)限別忘了
//? ? ? ? ? ? intent.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION);//授予臨時權(quán)限別忘了
? ? ? ? ? ? intent.setDataAndType(Path,"application/vnd.ms-excel");
return intent;
}
我上面注掉的代碼是另一種方式,按上面的方式寫不需要進(jìn)行7.0以上的適配脾拆,如有興趣可以嘗試下其他方法萧芙,但是轉(zhuǎn)過來轉(zhuǎn)過去最終還是需要的uri,何必多此一舉呢假丧,直接將uri當(dāng)參數(shù)豈不是更簡單双揪?
上面是以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);//授予臨時權(quán)限別忘了
? ? ? ? ? ? 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);//授予臨時權(quán)限別忘了
? ? ? ? ? ? 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);//授予臨時權(quán)限別忘了
? ? ? ? ? ? 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);//授予臨時權(quán)限別忘了
? ? ? ? ? ? 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);//授予臨時權(quán)限別忘了
? ? ? ? ? ? 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);//授予臨時權(quán)限別忘了
//? ? ? ? ? ? Uri uri = Uri.fromFile(file);
? ? ? ? ? ? intent.setDataAndType(path,"application/vnd.ms-powerpoint");
return intent;
}
其實最大的的區(qū)別就是
?intent.setDataAndType(“”,"");
//音視頻需要添加下面的flag
intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
intent.putExtra("oneshot",0);
intent.putExtra("configchange",0);
//下面這行至關(guān)重要包帚,7.0之后得加上渔期,要不然打開失敗。
intent.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION);//授予臨時權(quán)限別忘了
如有興趣留言探討。