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

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

如何获取 URI,即data.getData(), 在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 中onClick="startChoose"startChoose()onActivityResult()可以访问所选目录(=data.getData()),并且此路径将在dosomething()中使用,但我无法成功获得所选目录(=data.getData())dosomething()

PS:getExternalStoragePublicDirectory()已被弃用,但到目前为止可以在此处使用(或者您可以根据需要根据API 29进行更新)。

基本上,我需要的是用户通过单击按钮选择他/她的目录,并根据该目录,代码继续执行dosomething().

提前谢谢。

好的,搜索了一段时间后,我找到了以下内容来通过方法传输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 是目录的完整路径,需要简化为环境路径才能在此处工作。那是另一场比赛。

最新更新