Нет ActivityNotFoundException, если на устройстве не установлено средство просмотра csv - PullRequest
0 голосов
/ 16 октября 2019

Я хочу показать файл CSV в программе просмотра, когда программа просмотра CSV установлена ​​на телефоне. в противном случае мне нужно показать всплывающее сообщение «Программа просмотра CSV не установлена».

В моем случае, когда я тестирую приведенный ниже код на устройстве без установленного средства просмотра csv.

Я не получаю исключение ActivityNotFoundException. в результате мое тостовое сообщение не было показано. не могли бы вы помочь

            Uri uri = Uri.parse(pdfUrl);
            intent = new Intent(Intent.ACTION_VIEW);
            intent.setDataAndType(uri, "text/csv");
            intent.setFlags(Intent.FLAG_ACTIVITY_NO_HISTORY);
            try {
                startActivity(intent);
            } catch (ActivityNotFoundException e) {
                Toast.makeText(getActivity(), "There is no CSV viewer installed", Toast.LENGTH_SHORT).show();
            }

Ответы [ 3 ]

1 голос
/ 16 октября 2019

используя этот ответ SO , вы можете выполнить другое поведение:

Вместо того, чтобы пытаться запустить действие и перехватывать исключение ANF (что может быть проблематично, так как есть потокикоторое не сгенерирует это исключение), вы можете заранее проверить, будет ли обработано намерение.

используйте этот код Java: (при условии this наследовать от Activity)

Activity activity = this; // change this line if calling from other places (a fragment etc)
Uri uri = Uri.parse(pdfUrl);
intent = new Intent(Intent.ACTION_VIEW);
intent.setDataAndType(uri, "text/csv");
intent.setFlags(Intent.FLAG_ACTIVITY_NO_HISTORY);

if (intent.resolveActivity(activity.getPackageManager()) == null) {
    // No Activity found that can handle this intent.
    Toast.makeText(activity, "There is no CSV viewer installed", Toast.LENGTH_SHORT).show();
}
else{
    // There is an activity which can handle this intent.
    activity.startActivity(intent);
}
0 голосов
/ 16 октября 2019

Вы можете открыть intent chooser, который содержит приложение, которое обрабатывает файлы CSV.

startActivity(Intent.createChooser(intent, "Select Application"));

, если не установлено приложение, которое обрабатывает файл CSV, оно покажет, что приложение не установлено.

0 голосов
/ 16 октября 2019

Тост, показывающий неверную длину:

Toast.makeText(getActivity(), "There is no CSV viewer installed", Toast.LENGTH_SHORT).show();

Вы должны использовать Toast.LENGTH_SHORT вместо Toast.short

...