我试图找到MediaStore使用的sqlite数据库.据我所知,MediaStore包含默认音乐应用程序中定义的播放列表.我实际上想要复制一个播放列表,但应用程序不允许这样做.不知何故,如果我能找到实际的db文件,我想我可以解决这个问题.但是我现在完全陷入了困境,因为我找不到数据库.顺便说一下,我正在运行FroYo.
我有以下代码来显示一个imagepicker.用户选择图像后,onActivityResult被调用,以返回所选图像的数据.
然而,在kindle上,我得到一个resultCode为0,数据为null.其他人之前都注意到了这个问题?这个问题只发生在点燃火上.
startActivityForResult(new Intent(Intent.ACTION_PICK, android.provider.MediaStore.Images.Media.INTERNAL_CONTENT_URI), SELECT_PICTURE);
Run Code Online (Sandbox Code Playgroud) 我正在尝试使用MediaStore.Video.query()方法从视频文件(标题,语言,艺术家)中检索元数据.但是,该方法始终返回null.代码如下:
String[] columns = {
MediaStore.Video.VideoColumns._ID,
MediaStore.Video.VideoColumns.TITLE,
MediaStore.Video.VideoColumns.ARTIST
};
Cursor cursor = MediaStore.Video.query(getApplicationContext().getContentResolver(), videoUri,columns);
if (cursor != null) {
cursor.moveToNext();
}
String title = cursor.getString(cursor.getColumnIndex(MediaStore.Video.VideoColumns.TITLE));
Run Code Online (Sandbox Code Playgroud)
关于如何使用android返回视频元数据的任何建议?
==更新
当我在很多地方搜索时,我尝试了一个使用CursorLoader的解决方案.但是,CursorLoader中的方法loadInBackground()也返回null.代码如下所示:
String[] columns = {
MediaStore.Video.VideoColumns.TITLE
};
Uri videoUri = Uri.parse("content://mnt/sdcard/Movies/landscapes.mp4");
CursorLoader loader = new CursorLoader(getBaseContext(), videoUri, columns, null, null, null);
Cursor cursor = loader.loadInBackground();
cursor.moveToFirst();
String title = cursor.getString(cursor.getColumnIndex(MediaStore.Video.VideoColumns.TITLE));
Run Code Online (Sandbox Code Playgroud) 尝试将位图保存到图库中
Bitmap bitmap = Bitmap.createBitmap(surfaceView.getWidth(), surfaceView.getHeight(), Bitmap.Config.ARGB_8888);
surfaceView.draw(new Canvas(bitmap));
MediaStore.Images.Media.insertImage(getContentResolver(), bitmap, "foo" , "bar");
Run Code Online (Sandbox Code Playgroud)
我在模拟器上运行了应用程序并获得了UnsupportedOperationException.
07-25 22:27:48.719: E/MediaStore(1918): Failed to insert image
07-25 22:27:48.719: E/MediaStore(1918): java.lang.UnsupportedOperationException: Unknown URI: content://media/external/images/media
07-25 22:27:48.719: E/MediaStore(1918): at android.database.DatabaseUtils.readExceptionFromParcel(DatabaseUtils.java:168)
07-25 22:27:48.719: E/MediaStore(1918): at android.database.DatabaseUtils.readExceptionFromParcel(DatabaseUtils.java:136)
07-25 22:27:48.719: E/MediaStore(1918): at android.content.ContentProviderProxy.insert(ContentProviderNative.java:415)
07-25 22:27:48.719: E/MediaStore(1918): at android.content.ContentResolver.insert(ContentResolver.java:730)
07-25 22:27:48.719: E/MediaStore(1918): at android.provider.MediaStore$Images$Media.insertImage(MediaStore.java:801)
Run Code Online (Sandbox Code Playgroud)
不幸的是我现在没有任何Android设备,这是因为模拟器吗?还是另一个原因?
我正在制作一个文件管理器,其中图片项目有一个小缩略图.
我通过使用获得缩略图MediaStore.一切正常.但是当我重命名或移动文件时,缩略图不会显示.
我找到了一段要刷新的代码MediaStore:
getActivity().sendBroadcast(
new Intent(Intent.ACTION_MEDIA_MOUNTED,
Uri.parse("file://" + Environment.getExternalStorageDirectory())));
Run Code Online (Sandbox Code Playgroud)
它工作但我必须等待4或5秒并刷新,然后缩略图更新.
重命名或移动后如何立即获取图像缩略图?
如何使用mediastore获取存储在特定文件夹中的视频文件列表?目前我正在使用此代码
package com.example.videolisttest;
import android.app.Activity;
import android.content.Context;
import android.database.Cursor;
import android.os.Bundle;
import android.provider.MediaStore;
import android.view.View;
import android.view.ViewGroup;
import android.widget.AdapterView;
import android.widget.BaseAdapter;
import android.widget.ListView;
import android.widget.TextView;
import android.widget.AdapterView.OnItemClickListener;
import android.widget.Toast;
public class MainActivity extends Activity {
private Cursor videocursor;
private int video_column_index;
ListView videolist;
int count;
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
init_phone_video_grid();
}
private void init_phone_video_grid() {
System.gc();
String[] proj = { MediaStore.Video.Media._ID,
MediaStore.Video.Media.DATA,
MediaStore.Video.Media.DISPLAY_NAME,
MediaStore.Video.Media.SIZE };
videocursor = …Run Code Online (Sandbox Code Playgroud) 在此处查看 Android Q中引入的存储访问更改后,默认情况下现在会删除位置信息。
Google要求我们以setRequireOriginal()媒体的uri作为参数调用“ MediaStore”对象。当您一张一张地获取媒体时,此方法有效,但是当我们查询整个画廊的ContentResolver时该怎么办?
请参阅此示例:
String[] projection = {
MediaStore.Files.FileColumns._ID,
MediaStore.Files.FileColumns.DATA,
MediaStore.Files.FileColumns.MEDIA_TYPE,
MediaStore.Images.Media.DATE_TAKEN,
MediaStore.Images.Media.WIDTH,
MediaStore.Images.Media.HEIGHT,
MediaStore.Images.Media.LATITUDE, // <----- THIS
MediaStore.Images.Media.LONGITUDE, // <----- THIS
MediaStore.Images.Media.MIME_TYPE,
};
String selection = MediaStore.Files.FileColumns.MEDIA_TYPE + "="
+ MediaStore.Files.FileColumns.MEDIA_TYPE_IMAGE;
Uri queryUri = MediaStore.Files.getContentUri("external");
Cursor cursor = null;
MediaStore a ;
try {
cursor = context.getContentResolver().query(queryUri, projection, selection,
null, MediaStore.Images.Media.DATE_TAKEN + " DESC");
}
catch (NullPointerException ex){
}
Run Code Online (Sandbox Code Playgroud)
从Q开始,纬度和经度始终设置为0。如果ACCESS_MEDIA_LOCATION在清单中添加了权限,是否可以获取一批媒体的位置数据?
我正在使用 FFmpeg 创建 CMAF 流,并使用FFMpeg的方法将其上传到AWS资源 (AWS MediaStore) PUT。我需要Content-Type在上传清单和段时传递标头。我有 3 种类型的文件:
application/x-mpegURL : m3u8 清单
application/dash+xml : mpd 清单
video/mp4 : 视频片段
目前,所有类型都Binary - octet-stream在AWS资源 (AWS MediaStore)中设置为。由于我将上传大量文件,因此无法在文件上传后使用 AWS Lambda 函数设置正确的内容类型。
[https @ 0x555fe7a7d1c0] Opening 'https://XXXX.YYYY.amazonaws.com/chunk-stream0-00001.mp4' for writing
[https @ 0x555fe7a7d0c0] request: PUT /chunk-stream0-00001.mp4 HTTP/1.1
Transfer-Encoding: chunked
User-Agent: Lavf/58.28.100
Accept: */*
Connection: keep-alive
Host: XXXXX.YYYY.amazonaws.com
Icy-MetaData: 1
Run Code Online (Sandbox Code Playgroud)
我尝试了 FFMpeg 的静态构建和主分支。我尝试了不同的方法来传递内容类型,但没有成功:
-mime_type 1 -headers "Content-type: video/mp4\r\n"
-mime_type "video/mp4,application/dash+xml,application/x-mpegURL"
-content_type application/dash+xml
-multiple_requests …
ffmpeg mediastore amazon-web-services http-live-streaming mpeg-dash
Android 问:我需要从我保存图像的特定目录中获取图像列表,并将这些图像显示在我的应用程序上。
保存图片代码:
final String relativeLocation = Environment.DIRECTORY_PICTURES + File.separator + "MyMedia" + File.separator + "Photo";
ContentResolver resolver = context.getContentResolver();
ContentValues contentValues = new ContentValues();
contentValues.put(MediaStore.MediaColumns.DISPLAY_NAME, name);
contentValues.put(MediaStore.MediaColumns.MIME_TYPE, "image/jpg");
contentValues.put(MediaStore.MediaColumns.RELATIVE_PATH, relativeLocation);
Uri imageUri = resolver.insert(MediaStore.Images.Media.EXTERNAL_CONTENT_URI, contentValues);
fos = resolver.openOutputStream(Objects.requireNonNull(imageUri));
bmp.compress(Bitmap.CompressFormat.JPEG,100, fos);
Objects.requireNonNull(fos).close();
Objects.requireNonNull(fos).flush();
Run Code Online (Sandbox Code Playgroud)
获取图片代码:
Uri externalUri = MediaStore.Images.Media.EXTERNAL_CONTENT_URI;
String[] projection = {
MediaStore.Files.FileColumns._ID,
MediaStore.Images.Media.DATE_TAKEN,
MediaStore.MediaColumns.TITLE,
MediaStore.Images.Media.MIME_TYPE,
MediaStore.MediaColumns.RELATIVE_PATH
};
Cursor cursor = context.getContentResolver().query(externalUri, projection, null, null, MediaStore.Images.Media.DATE_TAKEN +" DESC");
int idColumn = cursor.getColumnIndex(MediaStore.MediaColumns._ID);
int titleColumn = cursor.getColumnIndexOrThrow(MediaStore.MediaColumns.TITLE);
int relativePathColumn = cursor.getColumnIndexOrThrow(MediaStore.MediaColumns.RELATIVE_PATH); …Run Code Online (Sandbox Code Playgroud) 我需要在我的应用程序中使用后台服务一定时间后删除屏幕截图图像文件,并且使用上述方法工作正常
private void deleteTheFile(String path) {
File fdelete = new File(path);
if (fdelete.exists()) {
if (fdelete.delete()) {
getApplicationContext().sendBroadcast(new Intent(Intent.ACTION_MEDIA_SCANNER_SCAN_FILE, Uri.fromFile(new File(path))));
Log.i(TAG, "deleteTheFile: file deleted");
} else {
Log.i(TAG, "deleteTheFile: file not dellleeettteeeddd");
}
}
Run Code Online (Sandbox Code Playgroud)
但正如每个人都知道 android R (11) 带来的变化所以我尝试更新我的应用程序
MANAGE_EXTERNAL_STORAGE 权限
但谷歌拒绝了我的更新说
问题:需要使用 Media Store API
您已请求访问所有文件访问权限,但您的应用程序的核心功能似乎只需要访问媒体文件。借助 MediaStore API,应用程序可以贡献和访问外部存储卷上可用的媒体,而无需访问所有文件权限。
请更新您的应用,以便该功能使用媒体存储 API 并删除所有文件访问 (MANAGE_EXTERNAL_STORAGE) 权限。
但我以前从未使用过媒体存储API,我不知道它是否可以用它删除图像文件,因为删除文件属于可写部分
mediastore ×10
android ×9
video ×2
android-10.0 ×1
android-11 ×1
delete-file ×1
ffmpeg ×1
file ×1
kindle-fire ×1
list ×1
media ×1
mpeg-dash ×1
thumbnails ×1