#android #exception
Вопрос:
В моем приложении у меня есть pdf-файл, который нужно распечатать, выбрав установленные приложения на устройстве. Когда я попытался открыть приложение, оно выдает «Не найдено действий для обработки намерения». Я также добавил в свой файл манифеста, но это не помогает. Я установил printshare в свой эмулятор, который использовался для печати pdf. Ниже приведен мой код.
handler.postDelayed(new Runnable() {
@Override
public void run() {
try {
Uri uri = FileProvider.getUriForFile(InventoryPDFCreate.this,getPackageName(), pdfFile);
Intent intent = ShareCompat.IntentBuilder.from(InventoryPDFCreate.this)
.setStream(uri) // uri from FileProvider
.getIntent()
.setAction(Intent.ACTION_VIEW) //Change if needed
.setDataAndType(uri, "pdf/*")
.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION);
startActivity(intent);
} catch (ActivityNotFoundException e) {
e.printStackTrace();
toastMsg.showToast(InventoryPDFCreate.this, "No Application match to Open Print File" e);
}
}
}, 100);
Файл манифеста
<queries>
<!-- WebView -->
<intent>
<action android:name="android.intent.action.VIEW" />
<category android:name="android.intent.category.BROWSABLE" />
<data android:scheme="http" />
</intent>
<intent>
<action android:name="android.intent.action.VIEW" />
<category android:name="android.intent.category.BROWSABLE" />
<data android:scheme="https" />
</intent>
<!-- Camera -->
<intent>
<action android:name="android.media.action.IMAGE_CAPTURE" />
</intent>
<!-- Gallery -->
<intent>
<action android:name="android.intent.action.GET_CONTENT" />
</intent>
</queries>
Я получаю приведенное ниже исключение:
No Activity found to handle Intent { act=android.intent.action.VIEW dat=content://com.mobilesalesperson.controller/external/Android/AMSP/PrintReport/msp.pdf typ=pdf/* flg=0x80001 (has extras) }
Комментарии:
1.
setDataAndType(uri, "application/pdf")
?2. Пожалуйста, опубликуйте это в качестве ответа.
Ответ №1:
Проблема заключалась в том, что операция использовала неправильный тип mime в качестве параметра. Android поддерживает не все типы мимов, но это можно проверить с помощью карты MimeTypeMap.
Возвращает тип MIME для данного расширения, если поддерживается, в противном случае значение null.
final String mime = MimeTypeMap.getSingleton().getMimeTypeFromExtension("pdf");
Ответ №2:
Попробуйте что-нибудь вроде этого
Intent intent = new Intent(Intent.ACTION_VIEW);
intent.setData(Uri.parse(url));
startActivity(intent);
Или откройте pdf-файл в своем веб-представлении
WebView webView = findViewById(R.id.webview);
webView.getSettings().setJavaScriptEnabled(true);
webView.getSettings().setPluginsEnabled(true);
webView.loadUrl("https://docs.google.com/viewer?" pdf_url);
Комментарии:
1. Спасибо за ответ. Мое требование-распечатать pdf-файл из приложения Printshare. И теперь это сделано.