インテントを処理するアクティビティが見つかりません: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、

@Blundell 3gp btで試したが、例外がスローされる
jennifer

回答:


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 thanx for solution
Serg Burlaka 2018

URLがエンコードされているときに問題が発生したので、必要な場合がありますUri.parse(Uri.decode(encodedString))
hmac

39

AndroidアプリからWebページを開こうとしたときにもこのエラーが発生する場合は、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);
    }
}

にURLを渡すだけ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();
    }

import android.webkit.MimeTypeMapをインポートする必要があります。


これはそれを行うための長い道のりです:d
umerk44

1
一般的な例外を使用して、tryブロックにそのようなコードをラップすることは、通常、良い考えではありません。ここでの動作は完全に定義されていません-どの入力がメッセージを一目で出力するかわかりますか?どのような例外が発生し、その理由は何ですか?これは、十分にテストされていないコードの兆候です。
jbass 2017

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を開くことができるアプリ(つまり、ブラウザー)が電話にインストールされていなかったためです。したがって、ブラウザをインストールした後、問題は解決しました。

*レッスン:呼び出しているインテントを処理するアプリが少なくとも1つあることを確認してください*


6
では、この状況にどう対処できるでしょうか。
Nikhil、2016年

カスタムROMを備えたカスタムテストデバイスがなければ、インターネットアクティビティが発生します。これはまったく正しく聞こえません。
StarWind0

同じ問題がお客様から報告されています。したがって、デフォルトのインターネットブラウザがインストールされていないデバイスがいくつかあるようです。これを解決するには?
アビジット

エラーをキャッチし、動作しているブラウザがないことをinfo / dialog / toastに伝えますか?
erluxman

1
ソリューションstackoverflow.com/questions/22479211/…を参照してください。この場合、デバイスにデフォルトのブラウザー(またはディープリンクを処理するアプリケーション)が含まれているかどうかがわかります。
CoolMind

17

Maraguesの回答により、logcatの出力を確認しました。Uriに渡すパスにはプレフィックスを付ける必要があるようです
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回表示されているようです。


これは、正しい答えのようですが、問題は、古いものとOPをほぼ2ヶ月前に最後に見られたである
Maragues

これは私がやったことです。悲しいことに、私が解決策を見つけた後にのみ、私はこの回答を読みました:)
Janis Peisenieks '

10

正しいWeb 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インテントを呼び出しましたが、Typeを "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 / *")を使用する場合は、ビデオでも機能します。
Nestor

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

私は2つのアイデアを持っています。

まず、3gpファイルを再生したい場合は、MIMEタイプ "audio / 3gpp"または "audio / mpeg"を使用する必要があります。

2番目に、MIMEタイプなしでuseメソッドsetData(data)を試すことができますintent

お役に立てれば。


それでも例外05-04 17:30:30.022:WARN / System.err(4937):android.content.ActivityNotFoundException:No Activity found to handle Intent {act = android.intent.action.VIEW dat = / mnt / sdcard / audio-android.3gp}が表示されている
jennifer

Androidは3gpファイルをサポートしていますか?developer.android.com/guide/appendix/media-formats.html
パシャ

1

Deep linkingデフォルトがインストールされていない場合、この例外は、ブラウザーのURLを処理するときに発生する可能性があります。ディープリンクの場合、フォーマットでリンクを処理できるアプリケーションがインストールされていない可能性がありますmyapp://mylink

最大29のAPI のタンジェリンソリューションを使用できます。

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の場合、API 30でintent.resolveActivityがnullを返すを参照してください。


0

追加のような任意のURLで確認してみてください

https://www.google.com

パス内にあり、間違ったパスを追加しているよりも機能する場合は、アクティビティを開始

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.