#android #pdf #android-intent
#Android #PDF #android-намерение
Вопрос:
Мне нужно открыть PDF-файл, который я получаю с URL-адреса из JSON.
Этот URL-адрес не содержит расширения файла в конце URL-адреса. Я пробовал что-то вроде этого:
final String pdfUrl = dataUrl.replace("data", "file") "/x?filefield=" tf.getFieldName() "amp;context="" dataItemIdModOne ""amp;skipcache=1";
SharedPreferences sharedPrefs = getActivity().getSharedPreferences(Constants.userDetails, MODE_PRIVATE);
String username = sharedPrefs.getString(Constants.user, "");
String password = sharedPrefs.getString(Constants.pass, "");
String userPassword = username ":" password;
final String basicAuth = "Basic " new String(new Base64().encode(userPassword.getBytes()));
final Map<String, String> extraHeaders = new HashMap<>();
extraHeaders.put("Authorization", basicAuth);
pdfIcon.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
Uri uri = Uri.parse(pdfUrl);
Intent target = new Intent(Intent.ACTION_VIEW);
target.setDataAndType(uri,"*/*");
Bundle bundle = new Bundle();
bundle.putString("Authorization", basicAuth);
target.putExtra(Browser.EXTRA_HEADERS, bundle);
Intent intent = Intent.createChooser(target, "Open File");
try {
startActivity(intent);
} catch (ActivityNotFoundException e) {
Toast.makeText(getActivity(), "Please install PDF app", Toast.LENGTH_SHORT).show();
}
}
});
Мне просто нужно представить пользователю app chooser, чтобы он / она выбрал witch app для открытия файла или, в лучшем случае, просто напрямую открыть доступный PDF Reader на своем устройстве.
С помощью этой реализации я получаю app chooser, и когда я пытаюсь открыть файл, он загружается, но в конце говорится, что его нельзя открыть.
Итак, упражнение с этим URL-адресом заключается в том, что при вызове URL-адреса он перенаправляет на другой URL-адрес, который содержит сам PDF-файл. Но я не вижу этот второй URL. Также, когда я вставляю URL-адрес в браузере, он запрашивает имя пользователя и пароль (вот почему мне нужна базовая аутентификация).
Заранее спасибо.
Ответ №1:
Немногие, если таковые имеются, программы просмотра PDF будут поддерживать http
/ https
для своих ACTION_VIEW
действий. Практически ни один из них не будет поддерживать случайные Intent
дополнения, такие как EXTRA_HEADERS
.
Загрузите PDF самостоятельно, используя свой любимый HTTP client API (например, HttpUrlConnection
, OkHttp). Затем используйте ACTION_VIEW
для просмотра загруженного PDF-файла.