Чек https://developer.android.com/guide/topics/providers/document-provider.
Изменить 2:
Вычистил ответ.
Вам не хватает данных (постоянно) из результата в методе onActivityResult. URI должен храниться в месте, где вы можете передать его onClickListener кнопки загрузки (например, поле вашего объекта UploadActivity).
У вас уже есть Uri SelectedFileLocation
в вашем методе onActivityResult, и вы можете выполнить загрузку там. Зачем вам нужна еще одна кнопка?
Предполагая, что ваше ручное преобразование в URI обеспечивает то же, что и метод по умолчанию (Intent#getData
), просто измените эту переменную на поле вашей UploadActivity.
Не забудьте добавить ненулевые проверки в метод UploadFile или убедиться, что вы никогда не вызываете его с недопустимыми значениями.
Может выглядеть так:
public class UploadActivity extends AppCompatActivity {
...
Optional<Uri> selectedFile = Optional.empty();
@Override
protected void onCreate(Bundle savedInstanceState) {
...
upload.setOnClickListener( new View.OnClickListener() {
@Override
public void onClick(View v) {
if (selectedFile.isEmpty() == false) {
uploadFile( selectedFile.get() );
}
}
} );
}
...
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
...
if (data != null) {
selectedFile = Optional.of(data.getData());
uploadFile(selectedFile.get()); // if you still want to do it here as well
} else {
selectedFile = Optional.empty();
}
...
}
...
}
Пс .:
Также взгляните на Java Code Conventions.
Методы и переменные должны начинаться со строчной буквы.
(И всегда полезно оставить @Override для всех переопределяемых вами методов)