Не знайдено жодної діяльності для обробки Intent: android.intent.action.VIEW


97

Це мій код для відтворення записаного аудіофайлу 3gp

 Intent intent = new Intent(android.content.Intent.ACTION_VIEW);
        Uri data = Uri.parse(path);
        intent.setDataAndType(data, "audio/mp3");
        startActivity(intent);

Але під час запуску на моєму пристрої HTC (Android 2.2 Froyo) відображається виняток:

05-04 16:37:37.597: WARN/System.err(4065): android.content.ActivityNotFoundException: No Activity found to handle Intent { act=android.intent.action.VIEW dat=/mnt/sdcard/mnt/sdcard/audio-android.3gp typ=audio/mp3 }
05-04 16:37:37.597: WARN/System.err(4065):     at android.app.Instrumentation.checkStartActivityResult(Instrumentation.java:1567)
05-04 16:37:37.597: INFO/ActivityManager(92): Starting activity: Intent { act=android.intent.action.VIEW dat=/mnt/sdcard/mnt/sdcard/audio-android.3gp typ=audio/mp3 }
05-04 16:37:37.607: WARN/System.err(4065):     at android.app.Instrumentation.execStartActivity(Instrumentation.java:1537)
05-04 16:37:37.607: WARN/System.err(4065):     at android.app.Activity.startActivityForResult(Activity.java:2858)
05-04 16:37:37.607: WARN/System.err(4065):     at android.app.Activity.startActivity(Activity.java:2964)
05-04 16:37:37.607: WARN/System.err(4065):     at com.ey.camera.AudioRecorder.playAudio(AudioRecorder.java:244)
05-04 16:37:37.607: WARN/System.err(4065):     at com.ey.camera.AudioRecorder$4.onClick(AudioRecorder.java:225)
05-04 16:37:37.607: WARN/System.err(4065):     at android.view.View.performClick(View.java:2408)
05-04 16:37:37.607: WARN/System.err(4065):     at android.view.View$PerformClick.run(View.java:8817)
05-04 16:37:37.607: WARN/System.err(4065):     at android.os.Handler.handleCallback(Handler.java:587)
05-04 16:37:37.607: WARN/System.err(4065):     at android.os.Handler.dispatchMessage(Handler.java:92)
05-04 16:37:37.607: WARN/System.err(4065):     at android.os.Looper.loop(Looper.java:144)
05-04 16:37:37.607: WARN/System.err(4065):     at android.app.ActivityThread.main(ActivityThread.java:4937)
05-04 16:37:37.607: WARN/System.err(4065):     at java.lang.reflect.Method.invokeNative(Native Method)
05-04 16:37:37.607: WARN/System.err(4065):     at java.lang.reflect.Method.invoke(Method.java:521)
05-04 16:37:37.607: WARN/System.err(4065):     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:868)
05-04 16:37:37.607: WARN/System.err(4065):     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:626)
05-04 16:37:37.607: WARN/System.err(4065):     at dalvik.system.NativeStart.main(Native Method)

У планшеті Galaxy він працює нормально. Як я можу вирішити цю проблему?


1
Це тому, що ваш файл .3gp, і ви говорите системі відтворювати дані у форматі mp3?
— Бланделл

@Blundell я спробував з 3gp bt, все-таки виняток
— Дженніфер

Відповіді:


154

Адресам URL-адрес повинен передувати http: //

Uri uri = Uri.parse("www.google.com");
Intent intent = new Intent(Intent.ACTION_VIEW, uri);

кидає ActivityNotFoundException. Якщо ви додаєте "http: //", проблема вирішена.

Uri uri = Uri.parse("http://www.google.com");

Можливо, це не допоможе OP, але я опинився тут, шукаючи той самий виняток, і, можливо, це допомагає іншим.


8
Чудово! Схема обов’язкова. file://був відсутній у моїй справі, поки я не змінився Uri.parse()на Uri.fromFile().
— Stan

@Stan thanx for solution
— Serg

У мене Uri.parse(Uri.decode(encodedString))
— виникала

40

Якщо ви також отримуєте цю помилку при спробі відкрити веб-сторінку з вашого додатка для Android, це тому, що ваша URL-адреса виглядає так:

www.google.com

замість: https://www.google.comабоhttp://www.google.com

додайте цей код у свою активність / фрагмент:

 public void openWebPage(String url) {

    Uri webpage = Uri.parse(url);

    if (!url.startsWith("http://") && !url.startsWith("https://")) {
        webpage = Uri.parse("http://" + url);
    }

    Intent intent = new Intent(Intent.ACTION_VIEW, webpage);
    if (intent.resolveActivity(getPackageManager()) != null) {
        startActivity(intent);
    }
}

просто передайте свою адресу openWebPage(). Якщо він уже має префікс https://або http://тоді ви готові піти, інакше оператор if це обробляє за вас


34

Це правильний спосіб зробити це.

    try
    {
    Intent myIntent = new Intent(android.content.Intent.ACTION_VIEW);
    File file = new File(aFile.getAbsolutePath()); 
    String extension = android.webkit.MimeTypeMap.getFileExtensionFromUrl(Uri.fromFile(file).toString());
    String mimetype = android.webkit.MimeTypeMap.getSingleton().getMimeTypeFromExtension(extension);
    myIntent.setDataAndType(Uri.fromFile(file),mimetype);
    startActivity(myIntent);
    }
    catch (Exception e) 
    {
        // TODO: handle exception
        String data = e.getMessage();
    }

вам потрібно імпортувати імпорт android.webkit.MimeTypeMap;


це довгий шлях до цього: d
— umerk44

1
Обгортання такої кількості коду в блоці try за загальним винятком, як правило, не є гарною ідеєю. Поводження тут абсолютно невизначене - чи можете ви сказати, які вводи одразу ж надрукують повідомлення? Які винятки виникнуть, і чому? Це ознака коду, який не був ретельно перевірений.
— jbass

19

Для мене при спробі відкрити посилання:

Uri uri = Uri.parse("https://www.facebook.com/abc/");
                Intent intent = new Intent(Intent.ACTION_VIEW, uri);
                startActivity(intent);

Я отримав ту ж помилку android.content.ActivityNotFoundException: No Activity found to handle Intent

Проблема полягала в тому, що на моєму телефоні не було встановлено жодної програми, яка може відкривати URL-адреси (тобто браузери). Тож після встановлення браузера проблема була вирішена.

* Урок: Переконайтеся, що є хоча б одна програма, яка обробляє намір, якого ви телефонуєте *


6
То як ми можемо впоратися з цією ситуацією?
— Nikhil

без спеціального тестового пристрою зі спеціальним ПЗУ ви будете мати доступ до Інтернету. Це звучить зовсім не правильно.
— StarWind0

У мене виникає та сама проблема, про яку повідомляє клієнт. Отже, здається, що на деяких пристроях не встановлено веб-браузер за замовчуванням. Як це вирішити?
— Абхіджіт,

Виявити помилку та повідомити інформацію / діалог / тост за те, що у них немає працюючого браузера?
— erluxman

1
Див. Рішення stackoverflow.com/questions/22479211/… . У цьому випадку ви дізнаєтесь, чи містить пристрій браузер за замовчуванням (або програму, яка обробляє глибоке посилання).
— CoolMind

17

Відповідь Maragues змусив мене перевірити вихідні дані logcat. Здається, шлях, який ви проходите до Урі, повинен мати префікс
file:/

Оскільки це локальний шлях до вашого сховища.

Можливо, ви захочете теж поглянути на сам шлях.

`05-04 16:37:37.597: WARN/System.err(4065): android.content.ActivityNotFoundException: No Activity found to handle Intent { act=android.intent.action.VIEW dat=/mnt/sdcard/mnt/sdcard/audio-android.3gp typ=audio/mp3 }`

Здається, точка монтування два рази з’являється на повному шляху.


здається, це правильна відповідь, але питання старе і ОП востаннє бачили майже 2 місяці тому
— Марагес

Це те, що я зробив. На жаль, я прочитав цю відповідь лише після того, як знайшов рішення :)
— Janis Peisenieks

10

Якщо ви не передали правильну веб-URL-адресу і не маєте браузера, відбувається ActivityNotFoundException, тому перевірте ці вимоги або явно обробіть виняток. Це може вирішити вашу проблему.

public static void openWebPage(Context context, String url) {
    try {
        if (!URLUtil.isValidUrl(url)) {
            Toast.makeText(context, " This is not a valid link", Toast.LENGTH_LONG).show();   
        } else {
            Intent intent = new Intent(Intent.ACTION_VIEW);
            intent.setData(Uri.parse(url));
            context.startActivity(intent);
        }
    } catch (ActivityNotFoundException e) {
        Toast.makeText(context, " You don't have any browser to open web page", Toast.LENGTH_LONG).show();
    }
}


3

У мене була така сама проблема, тому я дивився на намір, який зареєстрований у LogCat. Під час перегляду відео з Галереї він називав той самий намір Intent.View, але встановив для типу "audio / *", що виправило мою проблему, і не вимагає імпорту MimeTypeMap. Приклад:

Intent intent = new Intent(android.content.Intent.ACTION_VIEW);
Uri data = Uri.parse(path);
intent.setDataAndType(data, "audio/*");
startActivity(intent);

1
Також працює для відео, коли використовується intent.setDataAndType (data, "video / *") ;
— Нестор

3

Якби цей виняток навіть змінився на

"аудіо / *"

Але подяка @Stan я перетворив дуже просте, але корисне рішення:

Uri.fromFile(File(content)) замість цього Uri.parse(path)

 val intent =Intent(Intent.ACTION_VIEW)
                    intent.setDataAndType(Uri.fromFile(File(content)),"audio/*")
                    startActivity(intent)

Сподіваюся, це допоможе комусь вирішити його проблему.


3

Якщо у вас є ці помилки у вашому logcat, скористайтеся цими кодами, це допоможе мені

 Intent intent = new Intent(Intent.ACTION_VIEW);
            intent.setDataAndType(Uri.fromFile(new File(data.getLocation())), "audio/*");
            try {
                context.startActivity(intent);
            } catch (ActivityNotFoundException e) {
                Log.d("error", e.getMessage());
            }

також

   Intent intent = new Intent(MediaStore.INTENT_ACTION_MUSIC_PLAYER);
            intent.setDataAndType(Uri.fromFile(new File(data.getLocation())), "audio/*");
            try {
                context.startActivity(intent);
            } catch (ActivityNotFoundException e) {
                Log.d("error", e.getMessage());
            }

2

Спочатку спробуйте цей код всередині AndroidManifest

  <application>

    <uses-library
        android:name="org.apache.http.legacy"
        android:required="false" />
 </application>

Якщо цей код працює, так добре. Але якщо ні. Спробуйте цей код, з якого класу ви хочете передати дані або uri.

Intent window = new Intent(getApplicationContext(), Browser.class);
window.putExtra("LINK", "http://www.yourwebsite.com");
startActivity(window);

Сподіваюся, це вирішить вашу проблему. Дякую


1

У мене є дві ідеї:

По-перше: якщо ви хочете відтворити файл 3gp, вам слід використовувати типи mime "audio / 3gpp" або "audio / mpeg"

І друге: ви можете спробувати використовувати метод setData(data)для intentбудь-якого типу mime.

Сподіваюся, це допомагає.


все ще виняток 05-04 17: 30: 30.022: WARN / System.err (4937): android.content.ActivityNotFoundException: Не знайдено жодної діяльності для обробки намірів {act = android.intent.action.VIEW dat = / mnt / sdcard / показується audio-android.3gp}
— Дженніфер

Чи підтримує android ваш файл 3gp? developer.android.com/guide/appendix/media-formats.html
— Паша

1

Цей виняток може виникнути під час обробки Deep linkingабо URL-адреси браузера, якщо не встановлено за замовчуванням. У разі глибокого зв’язування може не бути встановленим додатком, який може обробляти посилання у форматі myapp://mylink.

Ви можете використовувати мандариновий розчин для API до 29:

private fun openUrl(url: String) {
    val intent = Intent(Intent.ACTION_VIEW, Uri.parse(url))
    val activityInfo = intent.resolveActivityInfo(packageManager, intent.flags)
    if (activityInfo?.exported == true) {
        startActivity(intent)
    } else {
        Toast.makeText(
            this,
            "No application that can handle this link found",
            Toast.LENGTH_SHORT
        ).show()
    }
}

Для API> = 30 див. Intent.resolveActivity повертає значення null в API 30 .


0

спробуйте перевірити будь-яку URL-адресу типу add

https://www.google.com

у шляху та розпочати діяльність, якщо вона працює, ніж ви додаєте неправильний шлях

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.