相关疑难解决方法(0)

以编程方式从Android的内置Gallery应用程序中获取/选择图像

我正试图在我的应用程序内打开Gallery内置应用程序中的图像/图片.

我有一张图片的URI(图片位于SD卡上).

你有什么建议吗?

android image gallery android-intent

265
推荐指数
12
解决办法
30万
查看次数

从URI,Android KitKat新的存储访问框架获取真实路径

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卡上的真实路径?

android uri path android-4.4-kitkat

199
推荐指数
8
解决办法
23万
查看次数

如何从Uri获取位图?

如何从Uri中获取Bitmap对象(如果我成功将其存储在 /data/data/MYFOLDER/myimage.png或中file///data/data/MYFOLDER/myimage.png)以在我的应用程序中使用它?

有没有人知道如何实现这一目标?

android uri android-image android-bitmap

187
推荐指数
10
解决办法
30万
查看次数

Android:从内容URI获取文件URI?

在我的应用程序中,用户将选择应用程序随后处理的音频文件.问题是,为了让应用程序按照我想要的方式处理音频文件,我需要URI为文件格式.当我使用Android的原生音乐播放器在应用程序中浏览音频文件时,URI是一个内容URI,如下所示:

content://media/external/audio/media/710
Run Code Online (Sandbox Code Playgroud)

但是,使用流行的文件管理器应用程序Astro,我得到以下内容:

file:///sdcard/media/audio/ringtones/GetupGetOut.mp3
Run Code Online (Sandbox Code Playgroud)

后者对我来说更容易使用,但当然我希望应用程序具有用户选择的音频文件的功能,而不管他们用来浏览他们的集合的程序.所以我的问题是,有没有办法将content://样式URI转换为file://URI?否则,你会建议我解决这个问题?以下是调用选择器的代码,供参考:

Intent ringIntent = new Intent();
ringIntent.setType("audio/mp3");
ringIntent.setAction(Intent.ACTION_GET_CONTENT);
ringIntent.addCategory(Intent.CATEGORY_OPENABLE);
startActivityForResult(Intent.createChooser(ringIntent, "Select Ringtone"), SELECT_RINGTONE);
Run Code Online (Sandbox Code Playgroud)

我使用内容URI执行以下操作:

m_ringerPath = m_ringtoneUri.getPath();
File file = new File(m_ringerPath);
Run Code Online (Sandbox Code Playgroud)

然后用所述文件做一些FileInputStream.

android uri file

109
推荐指数
6
解决办法
12万
查看次数

android通过Uri.getPath()获取真实路径

我正试图从画廊获取图像.

Intent intent = new Intent();
intent.setType("image/*");
intent.setAction(Intent.ACTION_GET_CONTENT);
startActivityForResult(Intent.createChooser(intent, "Select picture"), resultCode );
Run Code Online (Sandbox Code Playgroud)

从这个活动返回后,我有一个包含Uri的数据.看起来像:

content://media/external/images/1
Run Code Online (Sandbox Code Playgroud)

如何将此路径转换为真实路径(就像' /sdcard/image.png')?

谢谢

android image-gallery

99
推荐指数
7
解决办法
19万
查看次数

Android用ACTION_GET_CONTENT打开一个文件导致不同的Uri

我试图通过使用打开文件Intent.ACTION_GET_CONTENT. Android文件浏览器

根据Android版本/设备品牌,文件浏览器打开,我得到以下结果:

Downloads以下位置选择文件:

content://com.android.providers.downloads.documents/document/446
Run Code Online (Sandbox Code Playgroud)

Fotos以下位置选择文件:

content://media/external/images/media/309
Run Code Online (Sandbox Code Playgroud)

FileCommander以下位置选择文件:

file:///storage/emulated/0/DCIM/Camera/20141027_132114.jpg
Run Code Online (Sandbox Code Playgroud)

我可以打开所有这些文件除了当我尝试打开从文件Downloads,,Audio,Afbeeldingen(图片)

我可能无法处理这种Uri: content://com.android.providers.downloads.documents/document/446

我试过以下的事情:

  • 尝试通过新文件(uri.getPath())打开文件.File.exists()返回false.
  • 尝试通过getContext().getContentResolver().openInputStream(uri)打开/访问该文件.结果进入FileNotFoundException
  • 尝试使用以下代码打开文件:

    public static String getRealPathFromURI_API19(Context context, Uri uri) {
    
    Log.i("uri", uri.getPath());
    String filePath = "";
    if (uri.getScheme().equals("file")) {
        return uri.getPath();
    } else if (DocumentsContract.isDocumentUri(context, uri)) {
        String wholeID = DocumentsContract.getDocumentId(uri);
        Log.i("wholeID", wholeID);
        // Split at colon, use second item in the array
        String[] splits = wholeID.split(":");
    if (splits.length == 2) {
        String …
    Run Code Online (Sandbox Code Playgroud)

android file-browser

33
推荐指数
1
解决办法
5万
查看次数

未知的网址内容:// downloads/my_downloads

我正在使用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)

android download android-download-manager

27
推荐指数
2
解决办法
12万
查看次数

在Android中获取所选图库图像的文件路径和文件名

我正在创建一个应用程序,它从库中上传所选图像并将其上传到Web服务.Web服务需要所选图像的文件名以及文件内容的base64编码.我已设法通过硬编码文件路径实现此目的.但是,我正在努力获得图像的真实文件路径.我已经在网上阅读并拥有此代码,但它对我不起作用:

 public void onActivityResult(int requestCode, int resultCode, Intent data) {
   if (resultCode == RESULT_OK) {
     Uri selectedImageUri = data.getData();
     String[] projection = {MediaStore.Images.Media.DATA};

     try {
       Cursor cursor = getContentResolver().query(selectedImageUri, projection, null, null, null);
       cursor.moveToFirst();

       int columnIndex = cursor.getColumnIndex(projection[0]);
       String picturePath = cursor.getString(columnIndex);
       cursor.close();
       Log.d("Picture Path", picturePath);
     }
     catch(Exception e) {
       Log.e("Path Error", e.toString());
     }
   }
 }
Run Code Online (Sandbox Code Playgroud)

我收到此错误:

java.lang.NullPointerException
Run Code Online (Sandbox Code Playgroud)

编辑

忘了提我正在使用Kitkat.看起来我的问题与KitKat有关.我发现这个(见下文)帮助我让我的应用程序正常工作:

KitKat上的Android Gallery为Intent.ACTION_GET_CONTENT返回不同的Uri

java android filepath android-gallery

25
推荐指数
5
解决办法
8万
查看次数

获得权限拒绝例外

我的应用程序中有一个活动允许用户逐个从设备中选择多个文件,我使用的是这样的意图:

Intent intent = new Intent();
intent.setType("*/*");
intent.setAction(Intent.ACTION_GET_CONTENT);
startActivityForResult(Intent.createChooser(intent, getString(R.string.select_attachments_activity_chooser_label)), SELECT_PICTURE);
Run Code Online (Sandbox Code Playgroud)

这工作得非常好,我正在选择Uri的文件,它们看起来像这样:

content://com.android.providers.media.documents/document/image%3A42555
Run Code Online (Sandbox Code Playgroud)

然后,如果文件是图像,我正在解码它:

InputStream streamForDecodeBitmap = MyApp.getContext().getContentResolver().openInputStream(uri);
Bitmap bitmap = BitmapFactory.decodeStream(streamForDecodeBitmap, null, options);
Run Code Online (Sandbox Code Playgroud)

当用户单击按钮时,我通过意图将Uris列表传递给另一个活动,在此活动中,在AsyncTask中,我在base64中编码该文件以通过网络发送它:

InputStream is = MyApp.getContext().getContentResolver().openInputStream(uri);
byte[] inputData = getBytes(is);
is.close();
return Base64.encodeToString(inputData, Base64.DEFAULT);
Run Code Online (Sandbox Code Playgroud)

问题是当我打开inputStream时,有时它可以工作,但大多数时候我得到这个异常:

E/AndroidRuntime(22270): Caused by: java.lang.SecurityException: Permission Denial: opening provider com.android.providers.media.MediaDocumentsProvider from ProcessRecord{42858fe0 22270:co.uk.manifesto.freeagentapp/u0a246} (pid=22270, uid=10246) requires android.permission.MANAGE_DOCUMENTS or android.permission.MANAGE_DOCUMENTS
Run Code Online (Sandbox Code Playgroud)

这些是我的清单中的所有权限:

<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<uses-permission android:name="android.permission.GET_TASKS" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
<uses-permission android:name="android.permission.MANAGE_DOCUMENTS"/>
Run Code Online (Sandbox Code Playgroud)

我正在使用KITKAT(API 19)测试设备.

android

24
推荐指数
4
解决办法
2万
查看次数

使用KitKat存储访问框架后,打开Goog​​le云端硬盘文件内容URI

我正在使用Android 4.4的存储访问框架并打开文件选择器.

一切正常,除非从Google云端硬盘中选择文件,我只能弄清楚如何将其作为输入流打开,但我想获得一个java File对象.

返回的内容uri看起来像这样:content://com.google.android.apps.docs.storage/document/acc%3D4%3Bdoc%3D2279

其他类似的问题,但没有一个工作解决方案,允许我获取文件名,文件大小和内容:

我还研究了Paul Burke的FileChooser(https://github.com/iPaulPro/aFileChooser),这是该问题列表中最常见的问题.

如何从该内容获取文件?

我目前的解决方法是从输入流写出一个临时文件.

谢谢!

android google-drive-api storage-access-framework

23
推荐指数
1
解决办法
3万
查看次数