Amacı işleyecek etkinlik bulunamadı: android.intent.action.VIEW


101

Bu, kaydedilen ses 3gp dosyasını oynatmak için benim kodum

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

Ancak onu HTC cihazımda (Android 2.2 Froyo) çalıştırırken bir istisna gösteriyor:

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 tablette iyi çalışıyor. Bu sorunu nasıl çözebilirim?


1
Dosyanızın bir .3gp olması ve sisteme mp3 olan verileri çalmasını söylemeniz mi?
Blundell

@Blundell 3gp bt ile denedim hala istisna atılıyor
jennifer

Yanıtlar:


157

URL adreslerinden önce http: // gelmelidir

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

bir ActivityNotFoundException oluşturur. Başına "http: //" eklerseniz, sorun çözülmüştür.

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

OP'ye yardımcı olmayabilir, ama burada aynı istisnayı aradım ve belki de başkalarına yardımcı olabilir.


8
Muhteşem! Şema bir zorunluluktur. file://Değiştim kadar benim durumumda eksikti Uri.parse()için Uri.fromFile().
Stan

@Stan thanx for solution
Serg Burlaka

URL kodlandığında bir sorunla karşılaşıyordum, bu yüzden yapmanız gerekebileceğini unutmayınUri.parse(Uri.decode(encodedString))
hmac

44

Android uygulamanızdan bir web sayfası açmaya çalışırken de bu hatayı alıyorsanız, bunun nedeni URL'nizin şuna benzemesidir:

www.google.com

yerine: https://www.google.comveyahttp://www.google.com

bu kodu Faaliyetinize / Parçanıza ekleyin:

 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);
    }
}

sadece url'nizi iletin openWebPage(). Zaten https://veya ön eki http://varsa, gitmekte fayda var, yoksa if ifadesi sizin için bunu halleder


34

Bunu yapmanın doğru yolu bu.

    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 dosyasını içe aktarmanız gerekir;


bunu yapmanın uzun yolu: d
umerk44

1
Bir try bloğunda bu kadar çok kodu genel istisna ile sarmak genellikle iyi bir fikir değildir. Buradaki davranış tamamen tanımlanmamıştır - hangi girişlerin bir mesaj yazdıracağını bir bakışta anlayabilir misiniz? Hangi istisnalar ortaya çıkacak ve neden? Bu, tamamen test edilmemiş bir kod işaretidir.
jbass

20

Bir bağlantıyı açmaya çalışırken benim için:

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

Aynı hatayı aldım android.content.ActivityNotFoundException: No Activity found to handle Intent

Sorun, telefonuma yüklenmiş URL'leri (yani tarayıcıları) açabilen herhangi bir uygulamamın olmamasıydı. Böylece bir tarayıcı kurduktan sonra sorun çözüldü.

* Ders: Aradığınız amacı işleyen en az bir uygulama olduğundan emin olun *


6
Peki bu durumu nasıl halledebiliriz?
Nikhil

özel bir ROM'a sahip özel bir test cihazı olmadan, bir internet etkinliğine sahip olacaksınız. Bu hiç doğru gelmiyor.
StarWind0

Bir müşteri tarafından bildirilen aynı sorunu yaşıyorum. Bu yüzden, varsayılan internet tarayıcısının kurulu olmadığı bazı cihazlar var gibi görünüyor. Bu nasıl çözülür?
Abhijit

Hatayı yakalayın ve çalışan bir tarayıcıya sahip olmadıkları bir bilgi / iletişim kutusu / tost verin?
erluxman

1
Bir çözüm stackoverflow.com/questions/22479211/… bakın . Bu durumda, bir cihazın varsayılan bir tarayıcı (veya bir Derin bağlantı işleyen bir uygulama) içerip içermediğini bileceksiniz.
CoolMind

18

Maragues tarafından verilen cevap, logcat çıktısını kontrol etmemi sağladı. URI'ya geçtiğiniz yolun önekinin eklenmesi gerektiği görülüyor
file:/

Depolamanıza giden yerel bir yol olduğu için.

Siz de yolun kendisine bakmak isteyebilirsiniz.

`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 }`

Bağlantı noktası, tam yolda iki kez görünüyor.


bu doğru cevap gibi görünüyor, ancak soru eski ve OP en son yaklaşık 2 ay önce görüldü
Maragues

Ben öyle yaptım. Ne yazık ki, bu cevabı ancak çözümleri bulduktan sonra okudum :)
Janis Peisenieks

10

Doğru web URL'sini iletmezseniz ve tarayıcınız yoksa ActivityNotFoundException oluşur, bu nedenle bu gereksinimleri kontrol edin veya istisnayı açıkça işleyin. Bu, sorununuzu çözebilir.

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

Ben de aynı sorunu yaşadım, bu yüzden LogCat'e giriş yapan amaca bakıyordum. Videoyu Galeri'den görüntülerken, aynı Intent.View amacını çağırdı, ancak Type'ı "audio / *" olarak ayarlayarak sorunumu çözdü ve MimeTypeMap'i içe aktarmayı gerektirmedi. Misal:

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

1
İntent.setDataAndType (data, "video / *") kullanılırken videolar için de çalışır ;
Nestor

3

Bu istisna olarak bile değişti

"ses/*"

Ama @Stan'a teşekkürler , çok basit ama kullanışlı bir çözüm buldum :

Uri.fromFile(File(content)) yerine Uri.parse(path)

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

Umarım birinin sorununu çözmesine yardımcı olur.


3

Logcat'inizde bu hatayı yaşıyorsanız, bu kodu kullanın, bana yardımcı olun

 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());
            }

Ayrıca

   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

Önce bu kodu AndroidManifest'te deneyin

  <application>

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

Bu kod çalışıyorsa, çok iyi. Ama eğer olmazsa. Veriyi veya uri'yi iletmek istediğiniz sınıftan bu kodu deneyin .

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

Umarım bu sorununuzu çözer. teşekkür ederim


1

İki fikrim var:

İlk olarak: 3gp dosyasını oynatmak istiyorsanız, "audio / 3gpp" veya "audio / mpeg" mime türlerini kullanmalısınız.

Ve ikinci: Eğer kullanım yöntemini deneyebilirsiniz setData(data)için intentherhangi mim türü olmayan.

Bu yardımcı olur umarım.


yine de istisna 05-04 17: 30: 30.022: WARN / System.err (4937): android.content.ActivityNotFoundException: Niyeti işlemek için Etkinlik bulunamadı {act = android.intent.action.VIEW dat = / mnt / sdcard / audio-android.3gp} gösteriliyor
jennifer

Android, 3gp dosyanızı destekliyor mu? developer.android.com/guide/appendix/media-formats.html
Pasha

1

Deep linkingVarsayılan olarak kurulu bir tarayıcı yoksa, bu istisna bir tarayıcıyı işlerken veya URL'de ortaya çıkabilir . Derin bağlantı durumunda, bir bağlantıyı formatta işleyebilen herhangi bir uygulama kurulmayabilir myapp://mylink.

API için mandalina çözümünü 29'a kadar kullanabilirsiniz:

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 için, bkz. İntent.resolveActivity, API 30'da null döndürür .


Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.