Не найдено действий для обработки намерения (android.intent.action.ПОСМОТРЕТЬ)

#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. И теперь это сделано.