这个问题最初是针对Android 1.6提出的.
我在我的应用程序中处理照片选项.
我的Activity中有一个按钮和一个ImageView.当我点击按钮时,它会重定向到图库,我可以选择一个图像.所选图像将出现在我的ImageView中.
在Android 4.4(KitKat)中访问新图库之前,我使用此方法在SD卡上获得了真正的路径:
public String getPath(Uri uri) {
String[] projection = { MediaStore.Images.Media.DATA };
Cursor cursor = managedQuery(uri, projection, null, null, null);
startManagingCursor(cursor);
int column_index = cursor.getColumnIndexOrThrow(MediaStore.Images.Media.DATA);
cursor.moveToFirst();
return cursor.getString(column_index);
}
Run Code Online (Sandbox Code Playgroud)
现在,Intent.ACTION_GET_CONTENT返回不同的数据:
之前:
content://media/external/images/media/62
Run Code Online (Sandbox Code Playgroud)
现在:
content://com.android.providers.media.documents/document/image:62
Run Code Online (Sandbox Code Playgroud)
我怎么能设法获得SD卡上的真实路径?
我正在使用Download Manger下载一些多媒体文件并对其进行分类.我也在使用Crashlytics,这是一个错误,我经常在不同的设备和Android版本上得到它.我正在寻找你的解决方案/建议!
java.lang.IllegalArgumentException: Unknown URL content://downloads/my_downloads
at android.content.ContentResolver.insert(ContentResolver.java:862)
at android.app.DownloadManager.enqueue(DownloadManager.java:1252)
at com.myapp.LessonFragment$DownloadClickListener.onClick(SourceFile:570)
at android.view.View.performClick(View.java:4262)
at android.view.View$PerformClick.run(View.java:17351)
at android.os.Handler.handleCallback(Handler.java:615)
at android.os.Handler.dispatchMessage(Handler.java:92)
at android.os.Looper.loop(Looper.java:137)
at android.app.ActivityThread.main(ActivityThread.java:4921)
at java.lang.reflect.Method.invokeNative(Method.java)
at java.lang.reflect.Method.invoke(Method.java:511)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1038)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:805)
at dalvik.system.NativeStart.main(NativeStart.java)
Run Code Online (Sandbox Code Playgroud)
您可以在下面看到我的代码:
private class DownloadClickListener implements View.OnClickListener {
@Override
public void onClick(View view) {
// Check if download manager available before request
if (!DownloadHelper.isDownloadManagerAvailable(getActivity())) {
// Build custom alert dialog
AlertDialog.Builder builder = new AlertDialog.Builder(getActivity());
builder.setMessage(R.string.download_manager_disabled);
builder.setCancelable(false);
builder.setPositiveButton(R.string.ok, (dialog, which) -> {
dialog.dismiss();
});
// Create and …Run Code Online (Sandbox Code Playgroud) 我正在开发一个VideoPlayer.我将已URI启动的意图转换为字符串,它给了我content://media/external......但我需要得到真正的道路.
例如: /storage/extSdcard.....
我该怎么做呢?
如果需要,这是我的代码:
videoURI = getIntent().getData();
vv.setVideoURI(videoURI);
videoName = videoURI.toString();
tvTitle.setText(videoName);
Run Code Online (Sandbox Code Playgroud) 例如
真正的路径是mnt/sdcard/image_1.jpg Uri路径是内容:// media/external/images/media/140喜欢这个
Uri photoUri =Uri.parse("content://media/external/images/media/140");
Log.d("selectedphoto",""+photoUri);
selectedImagePath = getPath(photoUri);
public String getPath(Uri uri) {
String[] projection = { MediaStore.Images.Media.DATA };
Cursor cursor = managedQuery(uri, projection, null, null, null);
int column_index = cursor.getColumnIndexOrThrow(MediaStore.Images.Media.DATA);
cursor.moveToFirst();
return cursor.getString(column_index);
}
Run Code Online (Sandbox Code Playgroud)
在上面的代码中我将Uri转换为实际路径,但是dnt知道如何将实际路径转换为Uri
我正在使用 Android 新照片选择器,我试图获取照片的真实文件位置,但照片选择器给了我以下内容URI content://media/picker/0/com.android.providers.media.photopicker/media/1000000020
我还尝试了以下方法来获取真实的文件位置,但是当我检查文件中的图像时,这似乎也给了我一个不准确的位置。
@Composable
private fun getRealPathFromURI(contentUri: Uri): String {
val projection = arrayOf(MediaStore.Images.Media.DATA)
val context = LocalContext.current
val cursor = context.contentResolver.query(contentUri, projection, null, null, null)
val columnIndex = cursor?.getColumnIndexOrThrow(MediaStore.Images.Media.DATA)
cursor?.moveToFirst()
val filePath = cursor?.getString(columnIndex!!)
cursor?.close()
println("filepath $filePath")
return filePath!!
}
Run Code Online (Sandbox Code Playgroud)
/sdcard/.transforms/synthetic/picker/0/com.android.providers.media.photopicker/media/1000000003.jpg
这不可能吗?
我想从图库中获取一个图像文件:
Intent intent = new Intent();
intent.setType("image/*");
intent.setAction(Intent.ACTION_GET_CONTENT);
startActivityForResult(Intent.createChooser(intent, "Select Picture"),
GET_IMAGE_FROM_GALLERY);
Run Code Online (Sandbox Code Playgroud)
消息"选择图片"未显示为Toast.
在onActivityResult();
Uri selectedImageUri = data.getData(); //log shows proper URI
String[] projection = { MediaStore.Images.Media.DATA };
Cursor cursor = getContentResolver().query(selectedImageUri,
projection, null, null, null);
int column_index = cursor
.getColumnIndexOrThrow(MediaStore.Images.Media.DATA);
cursor.moveToFirst();
String selectedImagePath = cursor.getString(column_index);
Run Code Online (Sandbox Code Playgroud)
cursor.getString(column_index) 返回Null.
我在Nexus 4上测试它.
编辑:
看起来这是Android 4.4的问题,我看到其他应用也失败了.