将URI从一种方法发送到另一种方法

时间:2020-10-12 23:44:30

标签: java android uri

通过以下方法通过此已知代码获取URI,即data.getData():

@Override
protected void onActivityResult(int requestCode, int resultCode, @Nullable Intent data) {
    super.onActivityResult(requestCode, resultCode, data);

    switch(requestCode) {
        case 8010:
            Log.i("Test", "Result URI " + data.getData());
            break;
    }
}

现在,在整个代码中还有另一种需要URI的方法(例如public void dosomething() {})。

如何在data.getData()中获取URI,即dosomething()

data.getData()中尝试使用dosomething()失败了。通常,使用标准变量轻松工作的方法似乎不适用于Uris。

附录

下面是一个具体的代码示例:

public class MainActivity extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
    }

    public void dosomething() {
        [--- here I need to get my data.getData() from onActivityResult()  (directory chosen by user in startChoose()) --- something like: mypath = data.getData();  ---]
        File imagedir = getExternalStoragePublicDirectory(mypath);
        [...]
}


    public void startChoose(View view) {
        Intent i = new Intent(Intent.ACTION_OPEN_DOCUMENT_TREE);
        i.addCategory(Intent.CATEGORY_DEFAULT);
        startActivityForResult(Intent.createChooser(i, "Choose directory"), 8010);
    }

    @Override
    protected void onActivityResult(int requestCode, int resultCode, @Nullable Intent data) {
        super.onActivityResult(requestCode, resultCode, data);

        switch(requestCode) {
            case 8010:
                Log.i("Test", "Result URI " + data.getData());
                break;
        }
    }
}

用户操作: 用户通过单击按钮来选择目录,该按钮将在XML中以startChoose()指向onClick="startChoose"onActivityResult()可以访问所选目录(=data.getData()),并且该路径应在dosomething()中使用,但是我没有成功在{中获得所选目录(=data.getData()) {1}}。

PS:dosomething()已过时,但到目前为止可以在这里使用(或者,如果需要,可以根据API 29对其进行更新)。

基本上,我需要的是用户通过单击按钮选择目录,然后基于该目录,代码继续在getExternalStoragePublicDirectory()中执行。

谢谢。

1 个答案:

答案 0 :(得分:0)

好的,搜索了一段时间之后,我发现以下内容可以通过方法传输Uri:

该类必须以以下变量声明开头:

public class MainActivity extends AppCompatActivity {
    public Uri mypath;

onActivityResult可以像这样:

@Override
protected void onActivityResult(int requestCode, int resultCode, @Nullable Intent data) {
    super.onActivityResult(requestCode, resultCode, data);

    switch (requestCode) {
        case 8010:
            mypath=data.getData();
            break;
    }
}

然后,您可以在代码中的任何地方使用变量mypath,如下所示:

 File mydirectory = getExternalStoragePublicDirectory(mypath.toString());

但是mypath是目录的完整路径,需要还原为环境路径才能在此处工作。那是另一场比赛。