Не знайдено жодної діяльності для обробки 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.