无法从我的内部应用程序目录播放视频

时间:2013-04-05 14:02:49

标签: android

看起来我无法播放存储在内部应用程序目录中的视频。

我的视频存储在/data/data/my.package.org/files/

我正在尝试使用

播放文件
String fpath = "/data/data/my.package.org/files/video.mpg"
Intent intent = new Intent(Intent.ACTION_VIEW);
intent.setDataAndType(Uri.parse(fpath), "video/*");

但是Android默认视频播放器和一些外部视频播放器(MX播放器)都说“此视频无法播放”。

当我将视频保存到SD卡时,它们可以正常播放。

为什么?

3 个答案:

答案 0 :(得分:0)

将您的视频放入资源文件夹,然后使用此代码与MediaPlayer播放视频

InputStream is = getResources().getAssets().open("video.mpg");

OR

将您的视频放入资源文件夹中......

String fpath = "/data/data/my.package.org/assets/video.mpg"
Intent intent = new Intent(Intent.ACTION_VIEW);
intent.setDataAndType(Uri.parse(fpath), "video/*");

答案 1 :(得分:0)

将您的视频放在res \ raw文件夹中。然后将其复制到外部目录,视频播放器等应用可以读取它们。只有您的应用可以读/ data / data / blah ....

如果它在res \ raw中,那么

         typeName = sourceSink.Types.video.toString();
         for (sourceSink.VideoFiles video: sourceSink.VideoFiles.values() ){
             resourceName = video.toString(); 
             fileName = resourceName + ".mp4";
             resource = getResources().getIdentifier(resourceName, "raw", "com.invodo.allshareplay");
             createExternalStoragePublicFile(typeName,fileName,resource);
         }

然后你可以用它来复制它:

        void createExternalStoragePublicFile(String fType, String fname, int res ) {
        // Create a path where we will place our picture in the user's
        // public pictures directory.  Note that you should be careful about
        // what you place here, since the user often manages these files.  For
        // pictures and other media owned by the application, consider
        // Context.getExternalMediaDir().
        File path = null;
        if (((fType.equals(sourceSink.Types.photo.toString())) || (fType.equals(sourceSink.Types.file.toString())) ) ){
            path = Environment.getExternalStoragePublicDirectory(
                    Environment.DIRECTORY_PICTURES);
            }
        if (fType.equals(sourceSink.Types.music.toString())) {
            path = Environment.getExternalStoragePublicDirectory(
                    Environment.DIRECTORY_MUSIC);
            }
        if (fType.equals(sourceSink.Types.video.toString())) {
            path = Environment.getExternalStoragePublicDirectory(
                    Environment.DIRECTORY_MOVIES);
        }
        File file = new File(path, "/" + fname);



        try {
            // Make sure the Pictures directory exists.
            path.mkdirs();

            // Very simple code to copy a picture from the application's
            // resource into the external file.  Note that this code does
            // no error checking, and assumes the picture is small (does not
            // try to copy it in chunks).  Note that if external storage is
            // not currently mounted this will silently fail.
            InputStream is = getResources().openRawResource(res);
            OutputStream os = new FileOutputStream(file);
            byte[] data = new byte[is.available()];
            is.read(data);
            os.write(data);
            is.close();
            os.close();

            scanMedia(file);

        } catch (IOException e) {
            // Unable to create file, likely because external storage is
            // not currently mounted.
            Log.w("ExternalStorage", "Error writing " + file, e);
        }
    }

答案 2 :(得分:0)

然后很容易 - 只做我提供的答案的后半部分并写出来。 / data / data /文件夹永远不会被您的应用程序以外的任何内容查看。