Android通过调用外部应用打开指定文件

来源:互联网 发布:java 图片上传非jsp 编辑:程序博客网 时间:2024/05/29 09:37

设置意图Intent的Action值为ACTION_GET_CONTENT,


Cateldory为CATEGORY_OPENABLE,


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


设置意图的Flags值为FLAG_ACTIVITY_NEW_TASK,


Action的值为ACTION_VIEW,


Data为第一个Intent中获得的Uri,


最后通过Intent的静态方法createChooser(Context context,Uri,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();        }    }

原创粉丝点击