Android開發之呼叫外部應用開啟指定檔案
阿新 • • 發佈:2019-01-03
Type為"*/*"指全部型別的檔案。
注意這裡需要動態申請讀寫許可權
if(ContextCompat.checkSelfPermission(this, Manifest.permission.WRITE_EXTERNAL_STORAGE)!=PackageManager.PERMISSION_GRANTED){ ActivityCompat.requestPermissions(this,new String[]{ "Manifest.permission.WRITE_EXTERNAL_STORAGE"},1); } Intent intent=new Intent(); intent.setAction(Intent.ACTION_GET_CONTENT); intent.addCategory(Intent.CATEGORY_OPENABLE); intent.setType("*/*"); startActivityForResult(intent,1);
在startActivityForResult的回撥方法中執行openFiles(Context context,Uri uri)方法
@Override protected void onActivityResult(int requestCode, int resultCode, Intent data) { super.onActivityResult(requestCode, resultCode, data); Uri uri; if(resultCode== Activity.RESULT_OK){ if(requestCode==1){ uri=data.getData(); openFile(this,uri); } } }
Data為第一個Intent中獲得的Uri,
public void openFile(Context context,Uri uri){ try{ Intent intent = new Intent(); intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); intent.setAction(Intent.ACTION_VIEW); intent.setData(/*uri*/uri); context.startActivity(intent); Intent.createChooser(intent, "請選擇對應的軟體開啟該附件!"); }catch (ActivityNotFoundException e) { Toast.makeText(context, "sorry附件不能開啟,請下載相關軟體!", Toast.LENGTH_SHORT).show(); } }