1. 程式人生 > >Android開發之呼叫外部應用開啟指定檔案

Android開發之呼叫外部應用開啟指定檔案

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