簡體   English   中英

將 URI 從一種方法發送到另一種方法

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM