web-dev-qa-db-ja.com

インテントを処理するアクティビティが見つかりません:Android.intent.action.VIEW

これは、録音されたオーディオ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タブレットでは正常に動作しています。この問題を解決するにはどうすればよいですか?

84
jennifer

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を助けないかもしれませんが、私はここで同じ例外を探して、他の人を助けるかもしれません。

140
Maragues

これが正しい方法です。

    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 import.Android.webkit.MimeTypeMapをインポートする必要があります。

33
Nitan Sehgal

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

openWebPage()にURLを渡すだけです。既にhttps://またはhttp://の接頭辞が付いている場合は、そのままで構いません。それ以外の場合はifステートメントが処理します

28

私にとってリンクを開こうとするとき:

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つあることを確認してください*

16
erluxman

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回表示されるようです。

16
Joel Bodega

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

あなたの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());
            }
4
Mujahid khan

私はこれと同じ問題を抱えていたので、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);
3
Adam

この便利な方法を確認してください。

URLUtil.guessUrl(urlString)

Google.comになります-> http://google.com

3
niko1312

この例外もに変更された

"オーディオ/*"

しかし、 @ Stan への感謝は、私は非常にシンプルだが便利な解決策になっています:

Uri.fromFile(File(content))代わりにUri.parse(path)

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

誰かが問題を解決するのに役立つことを願っています。

3
Serg Burlaka

私には2つのアイデアがあります:

最初:3gpファイルを再生する場合は、MIMEタイプ「audio/3gpp」または「audio/mpeg」を使用する必要があります

次に、MIMEタイプなしでintentに対してsetData(data)メソッドを使用できます。

お役に立てれば。

1
Pasha