[英]Sending a URI from one method to another one
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,即data.getData()
dosomething()
?
在data.getData()
中嘗試使用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 是目錄的完整路徑,需要縮減為環境路徑才能在這里工作。 那是另一場比賽。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.