Articles of android fileprovider

图像共享意图适用于Gmail,但崩溃了FB和Twitter

我试图允许用户将图像共享到设备上的其他应用程序。 该图像位于我的应用程序内部存储区域的files /子目录中。 它适用于Gmail,但Facebook和Twitter都在响应我的意图时崩溃。 编辑:Google+也可以。 以下是相关的代码部分。 在Application.xml中 XML / filepaths.xml <paths xmlns:android="http://sofzh.miximages.com/android/ppre codeFile imagePath = new File(getContext().getFilesDir(), shared); File newFile = new File(imagePath, snapshot.jpg"); Uri contentUri = FileProvider.getUriForFile(getContext(), "org.iforce2d.myapp.MyActivity", newFile); Intent shareIntent = new Intent(); shareIntent.setAction(Intent.ACTION_SEND); shareIntent.setType("image/jpeg"); shareIntent.putExtra(Intent.EXTRA_STREAM, contentUri); shareIntent.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION); List resInfos = getPackageManager().queryIntentActivities(shareIntent, PackageManager.MATCH_DEFAULT_ONLY); for (ResolveInfo info : resInfos) { getContext().grantUriPermission(info.activityInfo.packageName, contentUri, Intent.FLAG_GRANT_READ_URI_PERMISSION); } […]

FileProvider在GetUriForFile上抛出exception

我在FileProviders上的android开发人员参考上遵循了示例代码,但它不起作用。 我在我的Manifest中的文件提供程序定义中设置了path files/exports/ ,并且引用的文件确实存在于该路径中。 在我的清单中: 并在xml/file_paths.xml 然后我尝试使用以下代码获取content-uri: Java.IO.File exportFile = new Java.IO.File (“/data/data/com.company.app/files/exports/file.pdf”); Android.Net.Uri exportUri = Android.Support.V4.Content.FileProvider.GetUriForFile (this, “com.company.app.fileprovider”, exportFile); 但是我收到此错误: Exception of type ‘Java.Lang.NullPointerException’ was thrown. at Android.Runtime.JNIEnv.CallStaticObjectMethod (IntPtr jclass, IntPtr jmethod, Android.Runtime.JValue[] parms) [0x00064] in /Users/builder/data/lanes/monodroid-mlion-monodroid-4.10.2-branch/4b53fbd0/source/monodroid/src/Mono.Android/src/Runtime/JNIEnv.g.cs:1160 at Android.Support.V4.Content.FileProvider.GetUriForFile (Android.Content.Context context, System.String authority, Java.IO.File file) [0x00000] in :0 at com.company.App.ImageAndSubtitle.cloudStorageDidDownloadFile (System.Object sender, com.company.App.CloudStorageEventArgs args) […]

华为设备上的FileProvider错误

我在使用FileProvider.getUriForFile时只在我的应用程序中的华为设备上发生exception: Exception: java.lang.IllegalArgumentException: Failed to find configured root that contains /storage//Android/data//files/.export/2016-10-06 13-22-33.pdf at android.support.v4.content.FileProvider$SimplePathStrategy.getUriForFile(SourceFile:711) at android.support.v4.content.FileProvider.getUriForFile(SourceFile:400) 以下是我的清单中我的文件提供程序的定义: 具有已配置路径的资源文件: 关于这个问题的原因以及为什么它只发生在华为设备上的任何想法? 鉴于我没有华为设备,我该怎么调试呢? 更新: 我在我的应用程序中添加了更多日志,在这些设备上打印ContextCompat.getExternalFilesDirs和context.getExternalFilesDir时,我得到了一些不一致的结果: ContextCompat.getExternalFilesDirs: /storage/emulated/0/Android/data//files /storage/sdcard1/Android/data//files context.getExternalFilesDir: /storage/sdcard1/Android/data//files 这与ContextCompat.getExternalFilesDirs的文档不一致,后者声明The first path returned is the same as getExternalFilesDir(String) 这解释了这个问题,因为我在我的代码中使用了context.getExternalFilesDir ,而FileProvider使用了ContextCompat.getExternalFilesDirs 。

使用FileProvider从Gallery中选取图像文件

为Android N编译我遇到了FileProvider的问题。 我需要让用户从相册中选择图像/用相机拍照然后将其裁剪成方形。 我已经设法实现了一个用相机拍摄图像的FileProvider ,但是从图库中选择图像时我FileProvider了严重的问题。 问题是在库中有很多来自不同地方的文件,例如我有例外: java.lang.IllegalArgumentException: Failed to find configured root that contains /storage/6133-3766/DCIM/100ANDRO/DSC_0035.JPG 所以问题是,我可以将什么放到file_paths.xml来访问/storage/任何位置。 我不能依赖于确切的路径,因为WhatsApp和类似的应用程序可能会有图片,例如WhatsApp图像获取此路径: /storage/emulated/0/WhatsApp/Media/WhatsApp Images/IMG-20160821-WA0000.jpg 我已设法解决空路径: 根据文档 ,它类似于Environment.getExternalStorageDirectory() 。 但仍然无法弄清楚如何处理存储在/storage/SOME_DIR/ 。 请帮忙。

如何使FileProvider可用于其他应用程序?

有没有可能有一个FileProvider可用于其他应用程序? 的manifest.xml … <provider android:name="android.support.v4.content.FileProvider" android:authorities="com.example.myapp.fileprovider" android:exported="true" android:grantUriPermissions="false" android:permission="com.example.filesvisible.permission.READ" > <meta-data android:name="android.support.FILE_PROVIDER_PATHS" android:resource="@xml/filespath" /> </provider> … 从文档 : false:提供程序不适用于其他应用程序。 设置android:exported =“false”来限制对提供者访问你的应用程序。 只有具有与提供者相同的用户ID(UID)的应用程序才能访问它。 我试图设置导出为true,但我得到了这个exceptionUnable to get provider android.support.v4.content.FileProvider: java.lang.SecurityException: Provider must not be exported为什么我不能导出FileProvider?

在Android中使用存储访问框架保存文件

我将文档访问框架与我的云存储访问应用程序集成在一起。 使用这个文档,我已经能够访问该文件并检索它(我只是使用Gmail应用程序的附加function来检查这个)。 我现在试图find如何使用相同的方法保存文件(直接通过应用程序保存文件到云存储),我做了以下更改: 对于getRoots调用, row.add(Root.COLUMN_FLAGS, Root.FLAG_SUPPORTS_CREATE); 我也重写了createDocument方法。 我没有看到很多关于如何做到这一点的示例代码或文档。 我也看到,像“照片”应用程序的一堆应用程序有“共享”button,使用不同的方法(日志显示miniShareActivity),我的应用程序不显示在那(它看起来像它使用不同的文件共享机制) 我正在寻找信息 如何使用SAF来存储文件(任何示例文件将是伟大的或指向文档)。 我假设它将允许用户使用select器界面导航到文件夹并存储文件。 如何让应用程序显示在应用程序的“Minishare活动”列表中,以将文件导入到应用程序中(看起来它不提供select器界面,但我仍然希望提供支持,以便将文件保存到一个默认的位置)

在Android Nougat拍摄照片后,BitmapFactory无法解码来自Uri的位图

我试图拍照,然后使用照片。 这是我做的。 我的设备是Nexus 6P(Android 7.1.1) 。 首先,我创build了一个Uri : Uri mPicPath = UriUtil.fromFile(this, UriUtil.createTmpFileForPic()); //Uri mPicPath = UriUtil.fromFile(this, UriUtil.createFileForPic()); 然后,我开始Intent : Intent intent = ActivityUtils.getTakePicIntent(mPicPath); if (intent.resolveActivity(getPackageManager()) != null) { startActivityForResult(intent, RequestCode.TAKE_PIC); } 最后,我在onActivityResult上处理了这个Uri : if (requestCode == RequestCode.TAKE_PIC) { if (resultCode == RESULT_OK && mPicPath != null) { Bitmap requireBitmap = BitmapFactory.decodeFile(mPicPath.getPath()); //path is like […]

使用FileProvider在Android N上打开下载的文件

由于FileProvider的变化,我必须修复Android N的应用程序。 我已经基本阅读了最后一个关于这个话题的所有内容,但没有find解决scheme为我工作。 这里是我们之前的代码,它从我们的应用程序开始下载,将它们存储在Download文件夹中,并像DownloadManager告诉他已完成下载一样调用ACTION_VIEW意图: BroadcastReceiver onComplete = new BroadcastReceiver() { public void onReceive(Context ctxt, Intent intent) { Log.d(TAG, "Download commplete"); // Check for our download long referenceId = intent.getLongExtra(DownloadManager.EXTRA_DOWNLOAD_ID, -1); if (mDownloadReference == referenceId) { DownloadManager.Query query = new DownloadManager.Query(); query.setFilterById(mDownloadReference); Cursor c = mDownloadManager.query(query); if (c.moveToFirst()) { int columnIndex = c.getColumnIndex(DownloadManager.COLUMN_STATUS); if (DownloadManager.STATUS_SUCCESSFUL == […]

图像共享意图适用于Gmail,但崩溃FB和Twitter

我试图让用户分享一个图像到设备上的其他应用程序。 该图像位于我的应用内部存储区的文件/子目录中。 它适用于Gmail,但在回应我的意图时,Facebook和Twitter都崩溃了。 编辑:Google+也正常工作。 这里是代码的相关部分。 在Application.xml中 <provider android:name="android.support.v4.content.FileProvider" android:authorities="org.iforce2d.myapp.MyActivity" android:exported="false" android:grantUriPermissions="true"> <meta-data android:name="android.support.FILE_PROVIDER_PATHS" android:resource="@xml/filepaths" /> </provider> XML / filepaths.xml <paths xmlns:android="http://schemas.android.com/apk/res/android"> <files-path name="shared" path="shared"/> </paths> 以下是我的活动中的分享代码: File imagePath = new File(getContext().getFilesDir(), "shared"); File newFile = new File(imagePath, "snapshot.jpg"); Uri contentUri = FileProvider.getUriForFile(getContext(), "org.iforce2d.myapp.MyActivity", newFile); Intent shareIntent = new Intent(); shareIntent.setAction(Intent.ACTION_SEND); shareIntent.setType("image/jpeg"); shareIntent.putExtra(Intent.EXTRA_STREAM, contentUri); shareIntent.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION); List<ResolveInfo> […]

使用FileProvider从图库中选取图像文件

为Android N编译我遇到了FileProvider的问题。 我需要让用户从图库中挑选图片/用相机拍照,然后裁剪到正方形。 我已经设法实现了一个FileProvider用相机拍摄图像,但是我从图库中挑选图像存在严重的问题。 问题是在画廊有很多来自不同地方的文件,我有例外的例外: java.lang.IllegalArgumentException: Failed to find configured root that contains /storage/6133-3766/DCIM/100ANDRO/DSC_0035.JPG 所以问题是,我可以通过file_paths.xml来访问/storage/任何地方。 我不能依赖确切的path,因为有可能来自WhatsApp和类似的应用程序的图片,例如WhatsApp图像得到这个path: /storage/emulated/0/WhatsApp/Media/WhatsApp Images/IMG-20160821-WA0000.jpg 我已经设法解决空path: <external-path name="external_storage" path=""/> 根据文档类似于Environment.getExternalStorageDirectory() 。 但仍然无法弄清楚如何处理存储在/storage/SOME_DIR/ 。 请帮忙。