在Android中隐藏视频似乎无法实现?

时间:2015-06-17 12:15:56

标签: android video

要让MediaPlayer / VideoView能够播放视频文件,在将其保存到内部存储空间时,我们必须使用MODE_WORLD_READABLE进行保存,这样可以公开显示该设备。

如果我们将MODE_PRIVATE保存到私人内部存储空间,则无法播放。

我在播放文件之前尝试使用file.setReadable(true,false)解决这个问题,但是没有用。

我尝试在播放前将文件从内部存储器复制到外部存储器(之后从外部存储器中删除),但由于未知原因无法播放该文件。

如果我将视频文件保存到外部存储器,没有问题,但我有一个规格将视频文件保存到内部。

那么,如果使用MODE_PRIVATE将视频文件保存到内部存储器,如何使用VideoView播放视频文件?

...    
ctx.openFileOutput(filename, Context.MODE_PRIVATE);  
...

编辑:我尝试过FileProvider,但结果是一样的:

06-17 18:44:55.707: E/playVideo(14626): playVideo
06-17 18:44:55.758: E/MediaPlayer(14626): error (1, -2147483648)
06-17 18:44:55.783: E/MediaPlayer(14626): Error (1,-2147483648)
06-17 18:44:55.788: D/VideoView(14626): Error: 1,-2147483648

编辑:

这是我目前的内容提供商。 我应该更改它以及如何使用它来为此视频授予权限:

public class ContentProviderDB extends ContentProvider { //
    DatabaseManager dbHelper;
    public static final String AUTHORITY = "ourContentProviderAuthorities";// specific for our our app, will be specified in manifest
    public static final Uri CONTENT_URI = Uri.parse("content://" + AUTHORITY);

    @Override
    public boolean onCreate() {
        dbHelper = new DatabaseManager(getContext());
        return true;
    }

    @Override
    public int delete(Uri uri, String where, String[] args) {
        String table = getTableName(uri);
        SQLiteDatabase dataBase = dbHelper.getWritableDatabase();
        return dataBase.delete(table, where, args);
    }

    @Override
    public String getType(Uri arg0) {
        return null;
    }

    @Override
    public Uri insert(Uri uri, ContentValues initialValues) {
        String table = getTableName(uri);
        SQLiteDatabase database = dbHelper.getWritableDatabase();
        long value = database.insert(table, null, initialValues);
        return Uri.withAppendedPath(CONTENT_URI, String.valueOf(value));
    }

    @Override
    public Cursor query(Uri uri, String[] projection, String selection, String[] selectionArgs, String sortOrder) {
        String table = getTableName(uri);
        SQLiteDatabase database = dbHelper.getReadableDatabase();
        Cursor cursor = database.query(table, projection, selection, selectionArgs, null, null, sortOrder);
        return cursor;
    }

    @Override
    public int update(Uri uri, ContentValues values, String whereClause, String[] whereArgs) {
        String table = getTableName(uri);
        SQLiteDatabase database = dbHelper.getWritableDatabase();
        return database.update(table, values, whereClause, whereArgs);
    }

    public static String getTableName(Uri uri) {
        String value = uri.getPath();
        value = value.replace("/", "");// we need to remove '/'
        return value;
    }
}

在Manifest中:

    <provider
        android:name="com.example.asd.database.hq.ContentProviderDB"
        android:authorities="ourContentProviderAuthorities" >
    </provider>

编辑:尝试使用FileContentProvider,如下所示:

https://github.com/commonsguy/cw-omnibus/tree/master/ContentProvider/Files

编辑:试用自定义VideoView实现:https://code.google.com/p/android/issues/attachmentText?id=10197&aid=101970011000&name=VideoView.java&token=ABZ6GAelZgxrshWGWQmdsiltNpqJm9Xpnw%3A1434560893561接受FileDescriptor,如下所述: https://stackoverflow.com/a/5475436/2576903

这些解决方案都没有产生任何不同的结果

0 个答案:

没有答案