119

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

4

16 に答える 16

176

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");
于 2011-06-03T09:47:02.610 に答える
33

これが正しい方法です。

    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; をインポートする必要があります。

于 2011-06-20T09:58:18.003 に答える
23

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

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

于 2016-08-02T07:30:24.973 に答える
18

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

于 2011-08-25T18:26:55.140 に答える
10

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

URLUtil.guessUrl(urlString)

google.com を作成します -> http://google.com

于 2018-12-19T08:45:31.433 に答える
4

私はこれと同じ問題を抱えていたので、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);
于 2011-12-19T14:49:28.990 に答える
4

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

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

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 が API 30 で null を返すを参照してください。

于 2020-06-23T09:07:18.330 に答える
1

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

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

そして2番目: mimeタイプなしでメソッドsetData(data)を使用してみることができます。intent

于 2011-05-04T11:46:55.427 に答える
0

Try and catch を使用する代わりに。このように使用する必要があります

val intent = Intent(Intent.ACTION_VIEW)
                    intent.flags = Intent.FLAG_GRANT_READ_URI_PERMISSION
                    intent.setDataAndType(uri, type)    
startActivity(Intent.createChooser(intent, "view action"))
于 2021-06-07T03:52:50.447 に答える