通过以下方法通过此已知代码获取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()
中执行。
谢谢。
答案 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是目录的完整路径,需要还原为环境路径才能在此处工作。那是另一场比赛。