首页 文章

Android打视频的意图?

提问于
浏览
51

我试图通过启动一个意图在Android上播放视频 . 我正在使用的代码是:

tostart = new Intent(Intent.ACTION_VIEW);
tostart.setDataAndType(Uri.parse(movieurl), "video/*");
startActivity(tostart);

这适用于大多数手机,但不适用于 HTC Hero . 它似乎加载了一些不同的视频播放器 . 这确实播放了第一个视频 . 但是,之后的每个视频都没有响应 . (它保持一定的循环) .

如果我添加一个明确的

tostart.setClassName("com.htc.album","com.htc.album.ViewVideo");

(在startactivity之前)它确实在 HTC Hero 上工作 . 但是,由于这是一个 HTC 特定的调用,我无法在其他手机上运行此代码(例如 G1 ) . 在 G1 上,这有效:

tostart.setClassName("com.android.camera","com.android.camera.MovieView"); //g1 version

但英雄没有想到这个意图 . 有人知道所有Android设备应该支持的意图/类名列表吗?或者特定的一个发布视频?谢谢!

5 回答

  • 11

    在Intent上使用setDataAndType

    Intent intent = new Intent(Intent.ACTION_VIEW, Uri.parse(newVideoPath));
    intent.setDataAndType(Uri.parse(newVideoPath), "video/mp4");
    startActivity(intent);
    

    如果您不知道类型,请使用“video / mp4”作为MIME或使用“video / *” .

  • 74

    我和Hero一起使用了我认为已发布的API . 最后,我使用了一个测试来查看是否可以收到意图:

    private boolean isCallable(Intent intent) {
        List<ResolveInfo> list = getPackageManager().queryIntentActivities(intent, 
            PackageManager.MATCH_DEFAULT_ONLY);
        return list.size() > 0;
    }
    

    在使用时,我通常只是开始活动:

    final Intent intent = new Intent("com.android.camera.action.CROP");
    intent.setClassName("com.android.camera", "com.android.camera.CropImage");
    if (isCallable(intent)) {
        // call the intent as you intended.
    } else {
        // make alternative arrangements.
    }
    

    显而易见:如果你沿着这条路走 - 使用非公共API - 你必须绝对提供一个你知道肯定有用的后备 . 它不一定是完美的,它可以是Toast说这个手机/设备不支持,但你应该避免未被捕获的异常 . 结局很明显 .


    我发现Open Intents Registry of Intents Protocols非常有用,但我没有找到相当于绝对必须支持的TCK类型的意图列表,以及哪些应用程序执行不同手机的示例 .

  • 1

    以下代码对我来说很好 .

    Intent intent = new Intent(Intent.ACTION_VIEW, Uri.parse(movieurl));
    startActivity(intent);
    
  • 11

    从现在开始,在API 24之后, Uri.parse(filePath) 将无效 . 你需要使用它

    final File videoFile = new File("path to your video file");
    Uri fileUri = FileProvider.getUriForFile(mContext, "{yourpackagename}.fileprovider", videoFile);
    Intent intent = new Intent(Intent.ACTION_VIEW);
    intent.setDataAndType(fileUri, "video/*");
    intent.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION);//DO NOT FORGET THIS EVER
    startActivity(intent);
    

    但在使用之前,您需要了解文件提供程序的工作原理 . 转到official document link以更好地了解文件提供程序 .

  • 5

    从调试信息来看,似乎来自 MainActivityVideoIntent 无法将视频路径发送到 VideoActivity . 它从 uriString 给出 NullPointerException 错误 . 我认为 VideoActivity 中的一些代码:

    Intent myIntent = getIntent();
    String uri = myIntent.getStringExtra("uri");
    Bundle b = myIntent.getExtras();
    
    startVideo(b.getString(uri));
    

    无法从这里收到uri:

    public void playsquirrelmp4(View v) {
        Intent VideoIntent = (new Intent(this, VideoActivity.class));
        VideoIntent.putExtra("android.resource://" + getPackageName()
            + "/"+   R.raw.squirrel, uri);
        startActivity(VideoIntent);
    }
    

相关问题