Имеет ли Android класс, аналогичный Java Desktop.getDesktop (), для открытия файлов или подсказки пользователю выбрать связь приложения? - PullRequest
0 голосов
/ 12 марта 2020

Что мы пытаемся сделать: Мы пытаемся скопировать существующее Java настольное приложение в Android приложение (также на основе Java). Настольное приложение использует следующий код класса Desktop для открытия любой формы файла (например, docx, xlsx, txt, pdf. Jpg, et c.), Переданной ему. Этот код откроет файл для связанного приложения или предложит пользователю выбрать приложение, если оно не связано или не существует.

Наша проблема: Не знаком с Android классами разработки и системы Мы не смогли правильно определить, есть ли такой класс в Android или подходящей терминологии, чтобы найти его, и могли бы использовать вашу помощь.

Desktop.getDesktop().open(file); // Java version

1 Ответ

1 голос
/ 19 марта 2020

Я решил проблему, основываясь на предложении CommonWare об использовании Intent (см. Выше). Однако у меня действительно было несколько проблем с Uri путями, и мне нужно было включить использование FileProvider для обработки внутреннего пути к файлу при создании Uri, используемого в Intent.

Я предоставил код, который я используется для построения моего пути Uri, который был передан в Intent (обернутый в метод openFile(Uri uri). Если это помогает увидеть полный контекст того, как я использовал Intent, вы можете увидеть его здесь: ( Зачем Android Повреждение намерения открытия файла при открытии изображения? ).

Функция openFile (), обрабатывающая фактическое намерение:

<- language-all : lang- java ->

private void openFile(Uri uri){
    Intent intent = new Intent(Intent.ACTION_VIEW);
    intent.setData(uri);
    intent.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION | Intent.FLAG_ACTIVITY_NEW_TASK);
    startActivityForResult(intent, 2);
}

TableRow onClick(), создающий Uri из значения TableRow Uri создается через FileProvider, начиная с вызовов класса File.

row.setOnClickListener(v -> {

    TableRow tablerow = (TableRow) v;
    TextView sample = (TextView) tablerow.getChildAt(1);
    String result = sample.getText().toString();

    File filePaths = new File(getFilesDir().toString());
    File newFile = new File(filePaths, result);
    Uri contentUri = getUriForFile(getApplicationContext(), "com.mydomain.fileprovider", newFile);
    openFile(contentUri);

});
...