我想访问媒体文件/视频从共享存储使用媒体存储在Android上
我尝试了以下代码,但无效,甚至“菜单到选择”菜单也没有打开:
public class MainActivity extends AppCompatActivity {
List<Video> videoList = new ArrayList<Video>(); //Video is a class.
Uri collection;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
//Media Store
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.Q) {
collection = MediaStore.Video.Media.getContentUri(MediaStore.VOLUME_EXTERNAL);
} else {
collection = MediaStore.Video.Media.EXTERNAL_CONTENT_URI;
}
String[] projection = new String[] {
MediaStore.Video.Media._ID,
MediaStore.Video.Media.DISPLAY_NAME,
MediaStore.Video.Media.DURATION,
MediaStore.Video.Media.SIZE
};
String selection = MediaStore.Video.Media.DURATION +
" >= ?";
String[] selectionArgs = new String[] {
String.valueOf(TimeUnit.MILLISECONDS.convert(5, TimeUnit.MINUTES))
};
String sortOrder = MediaStore.Video.Media.DISPLAY_NAME + " ASC";
try (Cursor cursor = getApplicationContext().getContentResolver().query(
collection,
projection,
selection,
selectionArgs,
sortOrder)) {
// Cache column indices.
int idColumn = ((Cursor) cursor).getColumnIndexOrThrow(MediaStore.Video.Media._ID);
int nameColumn = cursor.getColumnIndexOrThrow(MediaStore.Video.Media.DISPLAY_NAME);
int durationColumn = cursor.getColumnIndexOrThrow(MediaStore.Video.Media.DURATION);
int sizeColumn = cursor.getColumnIndexOrThrow(MediaStore.Video.Media.SIZE);
while (cursor.moveToNext()) {
// Get values of columns for a given video.
long id = cursor.getLong(idColumn);
String name = cursor.getString(nameColumn);
int duration = cursor.getInt(durationColumn);
int size = cursor.getInt(sizeColumn);
Uri contentUri = ContentUris.withAppendedId(
MediaStore.Video.Media.EXTERNAL_CONTENT_URI, id);
// Stores column values and the contentUri in a local object
// that represents the media file.
videoList.add(new Video(contentUri, name, duration, size));
}
}
}
}
//Video Class
public class Video {
private final Uri uri;
private final String name;
private final int duration;
private final int size;
public Uri getUri() {
return uri;
}
public String getName() {
return name;
}
public int getDuration() {
return duration;
}
public int getSize() {
return size;
}
public Video(Uri uri, String name, int duration, int size) {
this.uri = uri;
this.name = name;
this.duration = duration;
this.size = size;
}
}
您的代码没有问题,但是您还没有要求外部存储读取权限。
在你的AndroidManifest.xml
文件中添加以下权限
<manifest ...>
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
....
</manifest>
并在运行时请求此权限,如请求应用程序权限中所示。
有没有办法在Android/data文件夹之外的外部存储器中创建和保存文本文件?我正在创建一个音乐应用程序,并添加了一个预设管理器,以便用户可以保存、加载和编辑预设文件(在Android 11之前工作得很好),我不希望在卸载应用程序时自动删除这些文件。这就像在卸载Photoshop时,Photoshop删除了所有Photoshop文档一样,太糟糕了!这些是用户保存的文件,如果用户愿意,可以单独删除
问题内容: 我想爱Django,但是开发环境中的静态文件和媒体文件业务让我发疯。请把我从愚蠢中解救出来。 我在开发机器上。我的项目目录的根目录中有文件夹。 在settings.py我有:和。 在我有: 但是我获取媒体文件的唯一方法是通过引用/media/media/例如 。 我期望(并且想要) 谁能告诉我这里发生了什么,并给我一个设置媒体文件处理的简单方法吗? 非常感谢你。 但这留下了两个问题:
我正在使用存储访问框架将图像下载到外部sd卡。问题是这些图像不会出现在图库中。我试图通过发送DocumentFile uri来通知Android媒体扫描仪使用意图,但这似乎不起作用。下面是我如何尝试通知媒体扫描器添加了新图像: 有没有其他方法来通知Android添加了新图像?(我已经尝试了这里描述的方法,但我无法使用这些方法获得真实路径)
我正面临Android N布局XML预览的问题。显示以下信息: “Android N要求IDE与Java 1.8或更高版本一起运行” 另外,我在我的操作系统中安装了Java1.8。 我怎么改变它?
我只是上传文件到谷歌云存储使用签名网址与Ajax上传。 已经完全上传了。但尝试从Bucket下载文件时,文件会像媒体文件一样损坏,否则pdf、txt文件工作正常。有什么建议请建议我谢谢。
在Android10中,需要访问存储的应用程序需要获得访问具体路径的许可。但是像file explorer这样的应用程序可以请求访问根存储的权限,并获得对所有存储的读/写权限。这就是我正在努力做的。 根据Android,我们必须为此使用。我的问题是,一切似乎是正确的,但权限没有授予应用程序。