Tidak ada Aktivitas ditemukan untuk menangani Intent: android.intent.action.VIEW


98

Ini adalah kode saya untuk memutar file 3gp audio yang direkam

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

Tetapi saat menjalankannya di perangkat HTC saya (Android 2.2 Froyo) menunjukkan pengecualian:

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)

Di tablet Galaxy itu berfungsi dengan baik. Bagaimana cara mengatasi masalah ini?


1
Apakah karena file Anda adalah .3gp dan Anda memberi tahu sistem untuk memutar data yaitu mp3?
Blundell

@Blundell saya mencoba dengan 3gp bt masih pengecualian dilempar
jennifer

Jawaban:


155

Alamat url harus diawali dengan http: //

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

melempar ActivityNotFoundException. Jika Anda menambahkan "http: //", masalah terpecahkan.

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

Mungkin tidak membantu OP, tetapi saya akhirnya di sini mencari pengecualian yang sama dan mungkin membantu orang lain.


8
Hebat! Skema adalah suatu keharusan. file://hilang dalam kasus saya sampai saya berubah Uri.parse()menjadi Uri.fromFile().
Stan

@Stan thanx untuk solusi
Serg Burlaka

Saya mendapatkan masalah saat url dikodekan, jadi perhatikan bahwa Anda mungkin perlu melakukannyaUri.parse(Uri.decode(encodedString))
hmac

40

Jika Anda juga mendapatkan kesalahan ini saat mencoba membuka halaman web dari aplikasi android Anda, itu karena url Anda terlihat seperti ini:

www.google.com

bukannya: https://www.google.comatauhttp://www.google.com

tambahkan kode ini ke Aktivitas / Fragmen Anda:

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

cukup kirimkan url Anda ke openWebPage(). Jika sudah diawali dengan https://atau http://maka Anda baik untuk pergi, jika pernyataan if menangani itu untuk Anda


34

Ini cara yang benar untuk melakukannya.

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

Anda perlu mengimpor impor android.webkit.MimeTypeMap;


ini adalah cara lama untuk melakukannya: d
umerk44

1
Membungkus kode sebanyak itu dalam blok percobaan dengan pengecualian umum biasanya bukanlah ide yang baik. Perilaku di sini sama sekali tidak terdefinisi - dapatkah Anda mengetahui input mana yang akan mencetak pesan secara sekilas? Pengecualian apa yang akan muncul, dan mengapa? Ini adalah kode tanda yang belum diuji secara menyeluruh.
jbass

19

Bagi saya saat mencoba membuka tautan:

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

Saya mendapat kesalahan yang sama android.content.ActivityNotFoundException: No Activity found to handle Intent

Masalahnya adalah karena saya tidak memiliki aplikasi yang dapat membuka URL (yaitu browser) yang terpasang di ponsel saya. Jadi setelah Menginstal browser, masalah terpecahkan.

* Pelajaran: Pastikan setidaknya ada satu aplikasi yang menangani maksud yang Anda panggil *


6
Jadi bagaimana kita menangani situasi ini?
Nikhil

tanpa perangkat uji khusus dengan ROM khusus, Anda akan memiliki aktivitas internet. Ini sama sekali tidak terdengar benar.
StarWind0

Saya mengalami masalah yang sama seperti yang dilaporkan oleh pelanggan. Jadi sepertinya ada beberapa perangkat yang tidak menginstal browser internet default. Bagaimana mengatasi ini?
Abhijit

Menangkap kesalahan dan memberikan info / dialog / bersulang bahwa mereka tidak memiliki browser yang berfungsi?
erluxman

1
Lihat solusi stackoverflow.com/questions/22479211/… . Dalam hal ini Anda akan tahu, apakah suatu perangkat berisi browser default (atau aplikasi yang memproses tautan dalam).
CoolMind

17

Jawaban oleh Maragues membuat saya memeriksa keluaran logcat. Tampaknya jalur yang Anda lewati ke Uri harus diawali dengan
file:/

Karena ini adalah jalur lokal ke penyimpanan Anda.

Anda mungkin juga ingin melihat jalan itu sendiri.

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

Titik gunung tampaknya muncul dua kali di jalur penuh.


ini sepertinya jawaban yang benar, tetapi pertanyaannya adalah lama dan OP terakhir terlihat hampir 2 bulan yang lalu
Maragues

Inilah yang saya lakukan. Sayangnya, saya hanya membaca jawaban ini setelah saya menemukan solusinya :)
Janis Peisenieks

10

Jika Anda tidak meneruskan URL web yang benar dan tidak memiliki browser, ActivityNotFoundException terjadi, jadi periksa persyaratan tersebut atau tangani pengecualian secara eksplisit. Itu bisa menyelesaikan masalah Anda.

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

Saya memiliki masalah yang sama, jadi saya melihat maksud yang login di LogCat. Saat melihat video dari Galeri, ini memanggil maksud Intent.View yang sama, tetapi setel Type ke "audio / *", yang memperbaiki masalah saya, dan tidak perlu mengimpor MimeTypeMap. Contoh:

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

1
Juga berfungsi untuk video saat menggunakan intent.setDataAndType (data, "video / *") ;
Nestor

3

Apakah pengecualian ini bahkan berubah menjadi

"audio / *"

Tapi terima kasih kepada @Stan saya telah berubah menjadi solusi yang sangat sederhana namun berguna:

Uri.fromFile(File(content)) sebagai gantinya Uri.parse(path)

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

Semoga dapat membantu seseorang untuk memperbaiki masalahnya.


3

Jika Anda memiliki kesalahan ini di logcat Anda, gunakan kode ini untuk membantu saya

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

juga

   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

Pertama coba kode ini di dalam AndroidManifest

  <application>

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

Jika kode ini berfungsi, baiklah. Tapi kalau tidak. Coba kode ini dari kelas mana Anda ingin meneruskan data atau uri.

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

Semoga ini akan menyelesaikan masalah Anda. Terima kasih


1

Saya punya dua ide:

Pertama: jika ingin memutar file 3gp sebaiknya menggunakan jenis mime "audio / 3gpp" atau "audio / mpeg"

Dan kedua: Anda dapat mencoba menggunakan metode setData(data)untuk intenttanpa jenis mime.

Semoga ini membantu.


masih pengecualian 05-04 17: 30: 30.022: WARN / System.err (4937): android.content.ActivityNotFoundException: Tidak ada Aktivitas yang ditemukan untuk menangani Intent {act = android.intent.action.VIEW dat = / mnt / sdcard / audio-android.3gp} sedang ditayangkan
jennifer

Apakah android mendukung file 3gp Anda? developer.android.com/guide/appendix/media-formats.html
Pasha

1

Pengecualian ini dapat muncul saat Anda menangani Deep linkingatau URL untuk browser, jika tidak ada default yang diinstal. Dalam kasus Deep linking, mungkin tidak ada aplikasi yang diinstal yang dapat memproses tautan dalam format myapp://mylink.

Anda dapat menggunakan solusi jeruk keprok untuk API hingga 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()
    }
}

Untuk API> = 30, lihat intent.resolveActivity mengembalikan null di API 30 .


Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.